微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(79)

下面这个函数实现标记引导分区,代码如下:

#001 BOOLEAN

#002 INIT_FUNCTION

#003 NTAPI

#004 IopMarkBootPartition(IN PLOADER_ParaMETER_BLOCK LoaderBlock)

#005 {

#006 OBJECT_ATTRIBUTES ObjectAttributes;

#007 STRING DeviceString;

#008 CHAR Buffer[256];

#009 UNICODE_STRING DeviceName;

#010 NTSTATUS Status;

#011 HANDLE FileHandle;

#012 IO_STATUS_BLOCK IoStatusBlock;

#013 PFILE_OBJECT FileObject;

#014

创建ARC的设备名称

#015 /* Build the ARC device name */

#016 sprintf(Buffer,"//ArcName//%s",LoaderBlock->ArcBootDeviceName);

#017 RtlInitAnsiString(&DeviceString,Buffer);

#018 Status = RtlAnsiStringToUnicodeString(&DeviceName,&DeviceString,TRUE);

#019 if (!NT_SUCCESS(Status)) return FALSE;

#020

打开引导设备。

#021 /* Open it */

#022 InitializeObjectAttributes(&ObjectAttributes,

#023 &DeviceName,

#024 OBJ_CASE_INSENSITIVE,

#025 NULL,

#026 NULL);

#027 Status = ZwOpenFile(&FileHandle,

#028 FILE_READ_ATTRIBUTES,

#029 &ObjectAttributes,

#030 &IoStatusBlock,

#031 0,

#032 FILE_NON_DIRECTORY_FILE);

#033 if (!NT_SUCCESS(Status))

#034 {

#035 /* Fail */

#036 KeBugCheckEx(INACCESSIBLE_BOOT_DEVICE,

#037 (ULONG_PTR)&DeviceName,

#038 Status,

#039 0,

#040 0);

#041 }

#042

获取这个设备的对象。

#043 /* Get the DO */

#044 Status = ObReferenceObjectByHandle(FileHandle,

#045 0,

#046 IoFileObjectType,

#047 KernelMode,

#048 (PVOID *)&FileObject,

#049 NULL);

#050 if (!NT_SUCCESS(Status))

#051 {

#052 /* Fail */

#053 RtlFreeUnicodeString(&DeviceName);

#054 return FALSE;

#055 }

#056

标记这个文件对象是引导分区。

#057 /* Mark it as the boot partition */

#058 FileObject->DeviceObject->Flags |= DO_SYstem_BOOT_PARTITION;

#059

#060 /* Save a copy of the DO for the I/O Error Logger */

#061 ObReferenceObject(FileObject->DeviceObject);

#062 IopErrorlogobject = FileObject->DeviceObject;

#063

#064 /* Cleanup and return success */

#065 RtlFreeUnicodeString(&DeviceName);

#066 NtClose(FileHandle);

#067 ObDereferenceObject(FileObject);

#068 return TRUE;

#069 }

#070

原文地址:https://www.jb51.cc/react/308451.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐