70 Irp->IoStatus.Information = 0;
115 if (
DriverObject->DriverExtension->ServiceKeyName.Buffer)
144 DPRINT1(
"ObjectName invalid (Type = %lu, DataLength = %lu)\n",
268 *DriverName = driverName;
294 if (
String2->Length < String1->Length)
297 NumChars = String1->Length /
sizeof(
WCHAR);
298 pc1 = String1->Buffer;
344 "%s%sSystem32\\Drivers\\%wZ%s\r\n",
385 DPRINT(
"Normalizing image path '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
387 InputImagePath = *ImagePath;
388 if (InputImagePath.
Length == 0)
391 ImagePath->MaximumLength = DriversPathString.
Length +
396 ImagePath->MaximumLength,
398 if (ImagePath->Buffer ==
NULL)
405 else if (InputImagePath.
Buffer[0] !=
L'\\')
407 ImagePath->Length = 0;
408 ImagePath->MaximumLength = SystemRootString.
Length +
412 ImagePath->MaximumLength,
414 if (ImagePath->Buffer ==
NULL)
424 DPRINT(
"Normalized image path is '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
467 DPRINT(
"Driver name: '%wZ'\n", &DriverName);
489 Status = ZwQueryKey(ServiceHandle,
544 (
PVOID*)&driverObject);
551 DPRINT1(
"Error while creating driver object \"%wZ\" status %x\n", &DriverName,
Status);
555 DPRINT(
"Created driver object 0x%p for \"%wZ\"\n", driverObject, &DriverName);
567 driverObject->
DriverSize = ModuleObject->SizeOfImage;
568 driverObject->
DriverInit = ModuleObject->EntryPoint;
596 (
PVOID*)&driverObject,
612 serviceKeyName.
Length = 0;
618 if (!serviceKeyName.
Buffer)
635 driverNamePaged.
Length = 0;
641 if (!driverNamePaged.
Buffer)
655 *DriverEntryStatus =
Status;
658 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &DriverName,
Status);
667 driverObject->
Flags &= ~DRVO_LEGACY_DRIVER;
683 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
704 *OutDriverObject = driverObject;
740 PVOID DriverBase = LdrEntry->DllBase;
764 BaseLength *=
sizeof(
WCHAR);
801 *ModuleObject = LdrEntry;
849 if (FileNameWithoutPath ==
NULL)
851 FileNameWithoutPath =
Buffer;
855 FileNameWithoutPath++;
869 if (FileExtension !=
NULL)
900 NextEntry = NextEntry->
Flink)
944 ULONG instanceCount = 0;
962 DPRINT(
"Processing %u instances for %wZ module\n", instanceCount,
ModuleName);
964 for (
ULONG i = 0;
i < instanceCount;
i++)
980 DPRINT1(
"ObjectName invalid (Type = %lu, DataLength = %lu)\n",
1008 DPRINT1(
"No device node found matching instance path '%wZ'\n", &instancePath);
1048 DPRINT(
"IopInitializeBootDrivers()\n");
1081 for (NextEntry = ListHead->
Flink;
1082 NextEntry != ListHead;
1083 NextEntry = NextEntry->
Flink)
1100 for (NextEntry = ListHead->
Flink;
1101 NextEntry != ListHead;
1102 NextEntry = NextEntry->
Flink)
1169 NextEntry2 = NextEntry2->
Flink;
1173 NextEntry2 = NextEntry2->
Blink;
1185 NextEntry = NextEntry->
Flink)
1242 ZwLoadDriver(*DriverList);
1307 DPRINT1(
"No unload privilege!\n");
1320 DPRINT(
"IopUnloadDriver('%wZ', %u)\n", &CapturedServiceName, UnloadPnpDrivers);
1333 &CapturedServiceName,
1397 DPRINT1(
"Driver deletion pending\n");
1415 CapturedServiceName.
Buffer,
1425 DPRINT1(
"RtlQueryRegistryValues() failed (Status %x)\n",
Status);
1437 DPRINT1(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1466 DPRINT1(
"Drivers device object is referenced or has attached devices\n");
1468 SafeToUnload =
FALSE;
1499 DPRINT1(
"No DriverUnload function! '%wZ' will not be unloaded!\n", &
DriverObject->DriverName);
1595 WCHAR NameBuffer[100];
1614 LocalDriverName.
Length = NameLength *
sizeof(
WCHAR);
1616 LocalDriverName.
Buffer = NameBuffer;
1621 LocalDriverName = *DriverName;
1664 if (!ServiceKeyName.
Buffer)
1675 DriverObject->DriverExtension->ServiceKeyName = ServiceKeyName;
1730 DPRINT(
"Calling driver entrypoint at %p\n", InitializationFunction);
1735 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &LocalDriverName,
Status);
1754 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
1793 if (!ReinitItem)
return;
1822 if (!ReinitItem)
return;
1843 IN ULONG DriverObjectExtensionSize,
1851 *DriverObjectExtension =
NULL;
1856 DriverObjectExtensionSize,
1872 ClientDriverExtension;
1873 while (DriverExtensions)
1888 if (!DriverExtensions)
1910 *DriverObjectExtension = NewDriverExtension + 1;
1930 while (DriverExtensions)
1948 if (!DriverExtensions)
return NULL;
1949 return DriverExtensions + 1;
1971 DPRINT1(
"ObjectName invalid (Type = %lu, DataLength = %lu)\n",
2004 DPRINT(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
2008 DPRINT(
"FullImagePath: '%wZ'\n", &ImagePath);
2016 DPRINT(
"Loading module from %wZ\n", &ImagePath);
2022 DPRINT(
"MmLoadSystemImage() failed (Status %lx)\n",
Status);
2036 Status = ZwQueryKey(ServiceHandle,
2046 .Buffer = servName->
Name
2059 &driverEntryStatus);
2062 DPRINT1(
"IopInitializeDriverModule() failed (Status %lx)\n",
Status);
2149 return LoadParams.
Status;
2182 DPRINT1(
"No load privilege!\n");
2195 DPRINT(
"NtLoadDriver('%wZ')\n", &CapturedServiceName);
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
#define STATUS_PRIVILEGE_NOT_HELD
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
#define OBJ_NAME_PATH_SEPARATOR
static WCHAR ServiceName[]
PUNICODE_STRING *NTAPI CmGetSystemDriverList(VOID)
char TextBuffer[BUFFERLEN]
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
static const unsigned char pc1[56]
static const unsigned char pc2[48]
static const WCHAR DeviceInstance[]
static const WCHAR Cleanup[]
#define UNIMPLEMENTED_DBGBREAK(...)
#define __drv_allocatesMem(kind)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define MAXIMUM_FILENAME_LENGTH
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeLowerIrql(oldIrql)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define KeSetEvent(pEvt, foo, foo2)
#define ExAcquireResourceExclusiveLite(res, wait)
#define InitializeListHead(ListHead)
#define ExGetPreviousMode
struct _FileName FileName
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static LPWSTR ClientIdentificationAddress
NTHALAPI VOID NTAPI HalDisplayString(PUCHAR String)
VOID NTAPI InbvIndicateProgress(VOID)
Gives some progress feedback, without specifying any explicit number of progress steps or percentage....
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
PLIST_ENTRY NTAPI ExInterlockedRemoveHeadList(IN OUT PLIST_ENTRY ListHead, IN OUT PKSPIN_LOCK Lock)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
#define FILESYSTEM_ROOT_NAME
#define LDRP_DRIVER_DEPENDENT_DLL
#define MM_SYSLDR_NO_IMPORTS
#define ExFreePoolWithTag(_P, _T)
#define _swprintf(buf, format,...)
#define InitializeObjectAttributes(p, n, a, r, s)
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
#define KeGetPreviousMode()
#define DOE_UNLOAD_PENDING
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID * BaseAddress
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ const STRING * String2
_In_ const STRING _In_ BOOLEAN CaseInSensitive
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
DRIVER_INFORMATION DriverInfo
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define RTL_REGISTRY_ABSOLUTE
#define RTL_QUERY_REGISTRY_DIRECT
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define UNICODE_STRING_MAX_BYTES
#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTKERNELAPI volatile KSYSTEM_TIME KeTickCount
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
NTSTATUS NTAPI RawFsDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
@ PiActionEnumRootDevices
USHORT NTAPI PpInitGetGroupOrderIndex(IN HANDLE ServiceHandle)
USHORT NTAPI PipGetDriverTagPriority(IN HANDLE ServiceHandle)
NTSTATUS NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
#define IoGetDrvObjExtension(DriverObject)
VOID PiQueueDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action, _In_opt_ PKEVENT CompletionEvent, _Out_opt_ NTSTATUS *CompletionStatus)
Queue a device operation to a worker thread.
PDEVICE_NODE IopRootDeviceNode
NTSTATUS PiPerformSyncDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action)
Perfom a device operation synchronously via PiQueueDeviceAction.
VOID NTAPI IopReadyDeviceObjects(IN PDRIVER_OBJECT Driver)
#define IoGetDevObjExtension(DeviceObject)
NTSTATUS NTAPI MmLoadSystemImage(IN PUNICODE_STRING FileName, IN PUNICODE_STRING NamePrefix OPTIONAL, IN PUNICODE_STRING LoadedName OPTIONAL, IN ULONG Flags, OUT PVOID *ModuleObject, OUT PVOID *ImageBaseAddress)
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
NTSTATUS NTAPI MmCallDllInitialize(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry, _In_ PLIST_ENTRY ModuleListHead)
NTSTATUS NTAPI MmUnloadSystemImage(IN PVOID ImageHandle)
#define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END
NTSTATUS NTAPI RtlFindCharInUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING SearchString, _In_ PCUNICODE_STRING MatchString, _Out_ PUSHORT Position)
const LUID SeLoadDriverPrivilege
LIST_ENTRY DriverReinitListHead
struct _LOAD_UNLOAD_PARAMS LOAD_UNLOAD_PARAMS
POBJECT_TYPE IoDriverObjectType
VOID NTAPI IopReinitializeBootDrivers(VOID)
static VOID FASTCALL IopDisplayLoadingMessage(_In_ PCUNICODE_STRING ServiceName)
Displays a driver-loading message in SOS mode.
PDEVICE_OBJECT IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING DeviceInstance)
NTSTATUS IopLoadDriver(_In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *DriverObject)
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
static BOOLEAN IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY BootLdrEntry)
KEVENT PiEnumerationFinished
VOID NTAPI IoRegisterDriverReinitialization(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_REINITIALIZE ReinitRoutine, IN PVOID Context)
ERESOURCE IopDriverLoadResource
struct _LOAD_UNLOAD_PARAMS * PLOAD_UNLOAD_PARAMS
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
static const WCHAR ServicesKeyName[]
NTSTATUS NTAPI IoCreateDriver(_In_opt_ PUNICODE_STRING DriverName, _In_ PDRIVER_INITIALIZE InitializationFunction)
VOID FASTCALL IopInitializeSystemDrivers(VOID)
PLIST_ENTRY IopGroupTable
PLIST_ENTRY DriverBootReinitTailEntry
KSPIN_LOCK DriverBootReinitListLock
NTSTATUS NTAPI IopUnloadDriver(PUNICODE_STRING DriverServiceName, BOOLEAN UnloadPnpDrivers)
NTSTATUS NTAPI MiResolveImageReferences(IN PVOID ImageBase, IN PUNICODE_STRING ImageFileDirectory, IN PUNICODE_STRING NamePrefix OPTIONAL, OUT PCHAR *MissingApi, OUT PWCHAR *MissingDriver, OUT PLOAD_IMPORTS *LoadImports)
VOID NTAPI IoDeleteDriver(_In_ PDRIVER_OBJECT DriverObject)
NTSTATUS NTAPI IopInvalidDeviceRequest(PDEVICE_OBJECT DeviceObject, PIRP Irp)
VOID NTAPI IoRegisterBootDriverReinitialization(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_REINITIALIZE ReinitRoutine, IN PVOID Context)
NTSTATUS IopInitializeDriverModule(_In_ PLDR_DATA_TABLE_ENTRY ModuleObject, _In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *OutDriverObject, _Out_ NTSTATUS *DriverEntryStatus)
Initialize a loaded driver.
LIST_ENTRY DriverBootReinitListHead
KSPIN_LOCK DriverReinitListLock
VOID NTAPI IopDeleteDriver(IN PVOID ObjectBody)
NTSTATUS IopGetDriverNames(_In_ HANDLE ServiceHandle, _Out_ PUNICODE_STRING DriverName, _Out_opt_ PUNICODE_STRING ServiceName)
VOID FASTCALL IopInitializeBootDrivers(VOID)
VOID NTAPI IopReinitializeDrivers(VOID)
NTSTATUS IopDoLoadUnloadDriver(_In_opt_ PUNICODE_STRING RegistryPath, _Inout_ PDRIVER_OBJECT *DriverObject)
Process load and unload driver operations. This is mostly for NtLoadDriver and NtUnloadDriver,...
NTSTATUS NTAPI NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
static VOID NTAPI IopLoadUnloadDriverWorker(_Inout_ PVOID Parameter)
NTSTATUS NTAPI LdrProcessDriverModule(PLDR_DATA_TABLE_ENTRY LdrEntry, PUNICODE_STRING FileName, PLDR_DATA_TABLE_ENTRY *ModuleObject)
NTSTATUS FASTCALL IopNormalizeImagePath(_Inout_ _When_(return >=0, _At_(ImagePath->Buffer, _Post_notnull_ __drv_allocatesMem(Mem))) PUNICODE_STRING ImagePath, _In_ PUNICODE_STRING ServiceName)
PLIST_ENTRY DriverReinitTailEntry
UNICODE_STRING IopHardwareDatabaseKey
static BOOLEAN IopSuffixUnicodeString(_In_ PCUNICODE_STRING String1, _In_ PCUNICODE_STRING String2, _In_ BOOLEAN CaseInSensitive)
Determines whether String1 may be a suffix of String2.
BOOLEAN PnPBootDriversLoaded
#define IoCompleteRequest
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define STATUS_DELETE_PENDING
#define STATUS_FAILED_DRIVER_ENTRY
#define STATUS_ILL_FORMED_SERVICE_ENTRY
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
VOID NTAPI ObMakeTemporaryObject(IN PVOID ObjectBody)
NTSTATUS NTAPI ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath, IN ULONG Attributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext, OUT PVOID *ObjectPtr)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
NTSYSAPI PLOADER_PARAMETER_BLOCK KeLoaderBlock
PPCI_DRIVER_EXTENSION DriverExtension
LIST_ENTRY PsLoadedModuleList
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
PEPROCESS PsInitialSystemProcess
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
UNICODE_STRING RegistryPath
struct _LDR_DATA_TABLE_ENTRY * LdrEntry
PDEVICE_OBJECT PhysicalDeviceObject
struct _DRIVER_OBJECT * DriverObject
UNICODE_STRING ServiceKeyName
PUNICODE_STRING HardwareDatabase
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]
PDRIVER_INITIALIZE DriverInit
PDRIVER_EXTENSION DriverExtension
PDEVICE_OBJECT DeviceObject
PDRIVER_UNLOAD DriverUnload
UNICODE_STRING DriverName
PDRIVER_OBJECT DriverObject
PDRIVER_REINITIALIZE ReinitRoutine
PVOID ClientIdentificationAddress
struct _IO_CLIENT_EXTENSION * NextExtension
UNICODE_STRING BaseDllName
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
LIST_ENTRY BootDriverListHead
LIST_ENTRY LoadOrderListHead
PUNICODE_STRING RegistryPath
PDRIVER_OBJECT DriverObject
#define TAG_DRIVER_EXTENSION
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_INSUFFICIENT_RESOURCES
static int Link(const char **args)
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR _In_ HANDLE hDriver
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
#define SERVICE_RECOGNIZER_DRIVER
#define SERVICE_FILE_SYSTEM_DRIVER
#define ExInitializeWorkItem(Item, Routine, Context)
#define DRVO_BUILTIN_DRIVER
struct _DRIVER_OBJECT DRIVER_OBJECT
VOID(NTAPI * PDRIVER_REINITIALIZE)(_In_ struct _DRIVER_OBJECT *DriverObject, _In_opt_ PVOID Context, _In_ ULONG Count)
struct _DRIVER_EXTENSION * PDRIVER_EXTENSION
#define DRVO_BOOTREINIT_REGISTERED
#define DRVO_UNLOAD_INVOKED
#define DRVO_REINIT_REGISTERED
#define DRVO_LEGACY_DRIVER
#define IRP_MJ_MAXIMUM_FUNCTION
DRIVER_INITIALIZE * PDRIVER_INITIALIZE
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ROUND_TO_PAGES(Size)
#define ObDereferenceObject
#define PsGetCurrentProcess
_Inout_opt_ PVOID Parameter