mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 14:18:41 +00:00
![Hermès Bélusca-Maïto](/assets/img/avatar_default.png)
- Add a new cmboot.h header to isolate the boot-support definitions shared with the NT/ReactOS bootloader. - Move CmpFreeDriverList() to cmboot.c so that we can use it for cleanup paths in the NT/ReactOS bootloader. - CmpFindControlSet(): Directly build the control set name in UNICODE, instead of doing an ANSI->UNICODE conversion. - Directly assign the CurrentControlSet\Services constant string, instead of going the route of init-empty-string + append-string. This is possible since that string is not modified later. - Remove ASSERT(FALSE), replacing them with correct failure handling. - Add cleanup paths in CmpAddDriverToList(). - Simplify and fix CmpFreeDriverList(): it's the full DriverNode that needs to be freed; not the LIST_ENTRY pointer. - Add other validity checks: * Registry value types and data sizes; * For multi-strings, verify that they are NULL-terminated. * For (multi-)strings, check whether they are NULL-terminated before optionally removing their trailing NULL character from the count. Check also whether they are of zero-length and take appropriate action where necessary. - Add CmpIsDriverInList() for future usage in CMBOOT compiled in bootloader mode. - Add SAL annotations and Doxygen documentation. - Add debug traces. - Formatting / code style fixes. ** TODO: Fix SafeBoot support **
81 lines
1.5 KiB
C
81 lines
1.5 KiB
C
/*
|
|
* PROJECT: ReactOS Kernel
|
|
* LICENSE: BSD - See COPYING.ARM in the top level directory
|
|
* PURPOSE: Configuration Manager - Boot Initialization Internal header
|
|
* COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group
|
|
*
|
|
* NOTE: This module is shared by both the kernel and the bootloader.
|
|
*/
|
|
|
|
//
|
|
// Boot Driver Node
|
|
//
|
|
typedef struct _BOOT_DRIVER_NODE
|
|
{
|
|
BOOT_DRIVER_LIST_ENTRY ListEntry;
|
|
UNICODE_STRING Group;
|
|
UNICODE_STRING Name;
|
|
ULONG Tag;
|
|
ULONG ErrorControl;
|
|
} BOOT_DRIVER_NODE, *PBOOT_DRIVER_NODE;
|
|
|
|
|
|
//
|
|
// Boot Routines
|
|
//
|
|
CODE_SEG("INIT")
|
|
HCELL_INDEX
|
|
NTAPI
|
|
CmpFindControlSet(
|
|
_In_ PHHIVE SystemHive,
|
|
_In_ HCELL_INDEX RootCell,
|
|
_In_ PCUNICODE_STRING SelectKeyName,
|
|
_Out_ PBOOLEAN AutoSelect);
|
|
|
|
|
|
//
|
|
// Driver List Routines
|
|
//
|
|
#ifdef _BLDR_
|
|
|
|
CODE_SEG("INIT")
|
|
BOOLEAN
|
|
NTAPI
|
|
CmpIsDriverInList(
|
|
_In_ PLIST_ENTRY DriverListHead,
|
|
_In_ PCUNICODE_STRING DriverName,
|
|
_Out_opt_ PBOOT_DRIVER_NODE* FoundDriver);
|
|
|
|
#endif /* _BLDR_ */
|
|
|
|
CODE_SEG("INIT")
|
|
BOOLEAN
|
|
NTAPI
|
|
CmpFindDrivers(
|
|
_In_ PHHIVE Hive,
|
|
_In_ HCELL_INDEX ControlSet,
|
|
_In_ SERVICE_LOAD_TYPE LoadType,
|
|
_In_opt_ PCWSTR BootFileSystem,
|
|
_Inout_ PLIST_ENTRY DriverListHead);
|
|
|
|
CODE_SEG("INIT")
|
|
BOOLEAN
|
|
NTAPI
|
|
CmpSortDriverList(
|
|
_In_ PHHIVE Hive,
|
|
_In_ HCELL_INDEX ControlSet,
|
|
_Inout_ PLIST_ENTRY DriverListHead);
|
|
|
|
CODE_SEG("INIT")
|
|
BOOLEAN
|
|
NTAPI
|
|
CmpResolveDriverDependencies(
|
|
_Inout_ PLIST_ENTRY DriverListHead);
|
|
|
|
CODE_SEG("INIT")
|
|
VOID
|
|
NTAPI
|
|
CmpFreeDriverList(
|
|
_In_ PHHIVE Hive,
|
|
_Inout_ PLIST_ENTRY DriverListHead);
|