reactos操作系统实现(81)

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

由于操作系统会使用一些缺省的驱动程序,需要在启动时加载指定的驱动程序。下面这个函数,主要实现系统启动时指定加载的驱动程序。代码如下:

#001 VOID

#002 FASTCALL

#003 IopInitializeSystemDrivers(VOID)

#004 {

#005 PSERVICE_GROUP CurrentGroup;

#006 PSERVICE CurrentService;

#007 NTSTATUS Status;

#008 ULONG i;

#009 PLIST_ENTRY NextGroupEntry,NextServiceEntry;

#010

#011 DPRINT("IopInitializeSystemDrivers()/n");

#012

循环地加载所有当前启动时加载的驱动程序。

#013 /* Start looping */

#014 for (NextGroupEntry = GroupListHead.Flink;

#015 NextGroupEntry != &GroupListHead;

#016 NextGroupEntry = NextGroupEntry->Flink)

#017 {

#018 /* Get the entry */

#019 CurrentGroup = CONTAINING_RECORD(NextGroupEntry,

#020 SERVICE_GROUP,

#021 GroupListEntry);

#022

#023 DPRINT("Group: %wZ/n",&CurrentGroup->GroupName);

#024

#025 /* Load all drivers with a valid tag */

#026 for (i = 0; i < CurrentGroup->TagCount; i++)

#027 {

#028 /* Start looping */

#029 for (NextServiceEntry = ServiceListHead.Flink;

#030 NextServiceEntry != &ServiceListHead;

#031 NextServiceEntry = NextServiceEntry->Flink)

#032 {

获取当服务的入口。

#033 /* Get the entry */

#034 CurrentService = CONTAINING_RECORD(NextServiceEntry,

#035 SERVICE,

#036 ServiceListEntry);

#037

#038 if ((!RtlCompareUnicodeString(&CurrentGroup->GroupName,

#039 &CurrentService->ServiceGroup,

#040 TRUE)) &&

#041 (CurrentService->Start == SERVICE_SYSTEM_START) &&

#042 (CurrentService->Tag == CurrentGroup->TagArray[i]))

#043

#044 {

#045 DPRINT(" Path: %wZ/n",&CurrentService->RegistryPath);

加载当前服务驱动程序。

#046 Status = IopLoadDriver(CurrentService);

#047 }

#048 }

#049 }

#050

加载所有没有标记的驱动程序。

#051 /* Load all drivers without a tag or with an invalid tag */

#052 for (NextServiceEntry = ServiceListHead.Flink;

#053 NextServiceEntry != &ServiceListHead;

#054 NextServiceEntry = NextServiceEntry->Flink)

#055 {

#056 /* Get the entry */

#057 CurrentService = CONTAINING_RECORD(NextServiceEntry,

#058 SERVICE,

#059 ServiceListEntry);

#060

#061 if ((!RtlCompareUnicodeString(&CurrentGroup->GroupName,

#062 &CurrentService->ServiceGroup,

#063 TRUE)) &&

#064 (CurrentService->Start == SERVICE_SYSTEM_START))

#065 {

#066 for (i = 0; i < CurrentGroup->TagCount; i++)

#067 {

#068 if (CurrentGroup->TagArray[i] == CurrentService->Tag)

#069 {

#070 break;

#071 }

#072 }

#073

#074 if (i >= CurrentGroup->TagCount)

#075 {

#076 DPRINT(" Path: %wZ/n",&CurrentService->RegistryPath);

开始加载当前驱动程序。

#077 Status = IopLoadDriver(CurrentService);

#078 }

#079 }

#080 }

#081 }

#082

#083 DPRINT("IopInitializeSystemDrivers() done/n");

#084 }

#085

猜你在找的React相关文章