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

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

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

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

相关推荐