reactos操作系统实现(72)

前端之家收集整理的这篇文章主要介绍了reactos操作系统实现(72)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_502_2@ReactOS通过对象管理机制为内核提供了一致的和安全的访问方式。对象管理器是一个用于创建、删除、保护和跟踪对象的内核一部份。由于I/O管理的设备是多方面的,就需要创建很多对象来表达这种设备,下面就来了解关于I/O相关的对象,初始化的代码如下:

@H_502_2@#001 BOOLEAN

@H_502_2@#002 INIT_FUNCTION

@H_502_2@#003 NTAPI

@H_502_2@#004 IopCreateObjectTypes(VOID)

@H_502_2@#005 {

@H_502_2@#006 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;

@H_502_2@#007 UNICODE_STRING Name;

@H_502_2@#008

@H_502_2@

@H_502_2@初始化对象为缺省的设置。

@H_502_2@#009 /* Initialize default settings */

@H_502_2@#010 RtlZeroMemory(&ObjectTypeInitializer,sizeof(ObjectTypeInitializer));

@H_502_2@#011 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);

@H_502_2@#012 ObjectTypeInitializer.PoolType = NonPagedPool;

@H_502_2@#013 ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK;

@H_502_2@#014 ObjectTypeInitializer.ValidAccessMask = FILE_ALL_ACCESS;

@H_502_2@#015 ObjectTypeInitializer.UseDefaultObject = TRUE;

@H_502_2@#016 ObjectTypeInitializer.GenericMapping = IopFileMapping;

@H_502_2@#017

@H_502_2@

@H_502_2@创建适配器对象。

@H_502_2@#018 /* Do the Adapter Type */

@H_502_2@#019 RtlInitUnicodeString(&Name,L"Adapter");

@H_502_2@#020 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#021 &ObjectTypeInitializer,

@H_502_2@#022 NULL,

@H_502_2@#023 &IoAdapterObjectType))) return FALSE;

@H_502_2@#024

@H_502_2@

@H_502_2@创建控制器对象。

@H_502_2@#025 /* Do the Controller Type */

@H_502_2@#026 RtlInitUnicodeString(&Name,L"Controller");

@H_502_2@#027 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(CONTROLLER_OBJECT);

@H_502_2@#028 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#029 &ObjectTypeInitializer,

@H_502_2@#030 NULL,

@H_502_2@#031 &IoControllerObjectType))) return FALSE;

@H_502_2@#032

@H_502_2@

@H_502_2@创建设备对象,设置分析回调函数IopParseDevice

@H_502_2@#033 /* Do the Device Type. FIXME: Needs Delete Routine! */

@H_502_2@#034 RtlInitUnicodeString(&Name,L"Device");

@H_502_2@#035 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DEVICE_OBJECT);

@H_502_2@#036 ObjectTypeInitializer.ParseProcedure = IopParseDevice;

@H_502_2@#037 ObjectTypeInitializer.SecurityProcedure = IopSecurityFile;

@H_502_2@#038 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#039 &ObjectTypeInitializer,

@H_502_2@#040 NULL,

@H_502_2@#041 &IoDeviceObjectType))) return FALSE;

@H_502_2@#042

@H_502_2@

@H_502_2@创建驱动程序对象。

@H_502_2@#043 /* Initialize the Driver object type */

@H_502_2@#044 RtlInitUnicodeString(&Name,L"Driver");

@H_502_2@#045 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DRIVER_OBJECT);

@H_502_2@#046 ObjectTypeInitializer.DeleteProcedure = IopDeleteDriver;

@H_502_2@#047 ObjectTypeInitializer.ParseProcedure = NULL;

@H_502_2@#048 ObjectTypeInitializer.SecurityProcedure = NULL;

@H_502_2@#049 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#050 &ObjectTypeInitializer,

@H_502_2@#051 NULL,

@H_502_2@#052 &IoDriverObjectType))) return FALSE;

@H_502_2@#053

@H_502_2@

@H_502_2@创建I/O端口完成对象。

@H_502_2@#054 /* Initialize the I/O Completion object type */

@H_502_2@#055 RtlInitUnicodeString(&Name,L"IoCompletion");

@H_502_2@#056 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(KQUEUE);

@H_502_2@#057 ObjectTypeInitializer.ValidAccessMask = IO_COMPLETION_ALL_ACCESS;

@H_502_2@#058 ObjectTypeInitializer.InvalidAttributes |= OBJ_PERMANENT;

@H_502_2@#059 ObjectTypeInitializer.GenericMapping = IopCompletionMapping;

@H_502_2@#060 ObjectTypeInitializer.DeleteProcedure = IopDeleteIoCompletion;

@H_502_2@#061 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#062 &ObjectTypeInitializer,

@H_502_2@#063 NULL,

@H_502_2@#064 &IoCompletionType))) return FALSE;

@H_502_2@#065

@H_502_2@

@H_502_2@创建文件对象。

@H_502_2@#066 /* Initialize the File object type */

@H_502_2@#067 RtlInitUnicodeString(&Name,L"File");

@H_502_2@#068 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(FILE_OBJECT);

@H_502_2@#069 ObjectTypeInitializer.InvalidAttributes |= OBJ_EXCLUSIVE;

@H_502_2@#070 ObjectTypeInitializer.MaintainHandleCount = TRUE;

@H_502_2@#071 ObjectTypeInitializer.ValidAccessMask = FILE_ALL_ACCESS;

@H_502_2@#072 ObjectTypeInitializer.GenericMapping = IopFileMapping;

@H_502_2@#073 ObjectTypeInitializer.CloseProcedure = IopCloseFile;

@H_502_2@#074 ObjectTypeInitializer.DeleteProcedure = IopDeleteFile;

@H_502_2@#075 ObjectTypeInitializer.SecurityProcedure = IopSecurityFile;

@H_502_2@#076 ObjectTypeInitializer.QueryNameProcedure = IopQueryNameFile;

@H_502_2@#077 ObjectTypeInitializer.ParseProcedure = IopParseFile;

@H_502_2@#078 ObjectTypeInitializer.UseDefaultObject = FALSE;

@H_502_2@#079 if (!NT_SUCCESS(ObCreateObjectType(&Name,

@H_502_2@#080 &ObjectTypeInitializer,

@H_502_2@#081 NULL,

@H_502_2@#082 &IoFileObjectType))) return FALSE;

@H_502_2@#083

@H_502_2@#084 /* Success */

@H_502_2@#085 return TRUE;

@H_502_2@#086 }

@H_502_2@这里主要就是根据不同的对象,设置不同的特性。

猜你在找的React相关文章