70 Irp->IoStatus.Information = 0;
115 if (
DriverObject->DriverExtension->ServiceKeyName.Buffer)
262 *DriverName = driverName;
288 if (
String2->Length < String1->Length)
291 NumChars = String1->Length /
sizeof(
WCHAR);
292 pc1 = String1->Buffer;
338 "%s%sSystem32\\Drivers\\%wZ%s\r\n",
379 DPRINT(
"Normalizing image path '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
381 InputImagePath = *ImagePath;
382 if (InputImagePath.
Length == 0)
385 ImagePath->MaximumLength = DriversPathString.
Length +
390 ImagePath->MaximumLength,
392 if (ImagePath->Buffer ==
NULL)
399 else if (InputImagePath.
Buffer[0] !=
L'\\')
401 ImagePath->Length = 0;
402 ImagePath->MaximumLength = SystemRootString.
Length +
406 ImagePath->MaximumLength,
408 if (ImagePath->Buffer ==
NULL)
418 DPRINT(
"Normalized image path is '%wZ' for service '%wZ'\n", ImagePath,
ServiceName);
461 DPRINT(
"Driver name: '%wZ'\n", &DriverName);
483 Status = ZwQueryKey(ServiceHandle,
535 (
PVOID*)&driverObject);
542 DPRINT1(
"Error while creating driver object \"%wZ\" status %x\n", &DriverName,
Status);
546 DPRINT(
"Created driver object 0x%p for \"%wZ\"\n", driverObject, &DriverName);
558 driverObject->
DriverSize = ModuleObject->SizeOfImage;
559 driverObject->
DriverInit = ModuleObject->EntryPoint;
587 (
PVOID*)&driverObject,
603 serviceKeyName.
Length = 0;
609 if (!serviceKeyName.
Buffer)
626 driverNamePaged.
Length = 0;
632 if (!driverNamePaged.
Buffer)
646 *DriverEntryStatus =
Status;
649 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &DriverName,
Status);
658 driverObject->
Flags &= ~DRVO_LEGACY_DRIVER;
674 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
695 *OutDriverObject = driverObject;
731 PVOID DriverBase = LdrEntry->DllBase;
755 BaseLength *=
sizeof(
WCHAR);
792 *ModuleObject = LdrEntry;
840 if (FileNameWithoutPath ==
NULL)
842 FileNameWithoutPath =
Buffer;
846 FileNameWithoutPath++;
860 if (FileExtension !=
NULL)
891 NextEntry = NextEntry->
Flink)
935 ULONG instanceCount = 0;
953 DPRINT(
"Processing %u instances for %wZ module\n", instanceCount,
ModuleName);
955 for (
ULONG i = 0;
i < instanceCount;
i++)
993 DPRINT1(
"No device node found matching instance path '%wZ'\n", &instancePath);
1033 DPRINT(
"IopInitializeBootDrivers()\n");
1066 for (NextEntry = ListHead->
Flink;
1067 NextEntry != ListHead;
1068 NextEntry = NextEntry->
Flink)
1085 for (NextEntry = ListHead->
Flink;
1086 NextEntry != ListHead;
1087 NextEntry = NextEntry->
Flink)
1154 NextEntry2 = NextEntry2->
Flink;
1158 NextEntry2 = NextEntry2->
Blink;
1170 NextEntry = NextEntry->
Flink)
1227 ZwLoadDriver(*DriverList);
1292 DPRINT1(
"No unload privilege!\n");
1305 DPRINT(
"IopUnloadDriver('%wZ', %u)\n", &CapturedServiceName, UnloadPnpDrivers);
1318 &CapturedServiceName,
1382 DPRINT1(
"Driver deletion pending\n");
1400 CapturedServiceName.
Buffer,
1410 DPRINT1(
"RtlQueryRegistryValues() failed (Status %x)\n",
Status);
1422 DPRINT1(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1451 DPRINT1(
"Drivers device object is referenced or has attached devices\n");
1453 SafeToUnload =
FALSE;
1484 DPRINT1(
"No DriverUnload function! '%wZ' will not be unloaded!\n", &
DriverObject->DriverName);
1580 WCHAR NameBuffer[100];
1599 LocalDriverName.
Length = NameLength *
sizeof(
WCHAR);
1601 LocalDriverName.
Buffer = NameBuffer;
1606 LocalDriverName = *DriverName;
1649 if (!ServiceKeyName.
Buffer)
1660 DriverObject->DriverExtension->ServiceKeyName = ServiceKeyName;
1715 DPRINT(
"Calling driver entrypoint at %p\n", InitializationFunction);
1720 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &LocalDriverName,
Status);
1739 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
1778 if (!ReinitItem)
return;
1807 if (!ReinitItem)
return;
1828 IN ULONG DriverObjectExtensionSize,
1836 *DriverObjectExtension =
NULL;
1841 DriverObjectExtensionSize,
1857 ClientDriverExtension;
1858 while (DriverExtensions)
1873 if (!DriverExtensions)
1895 *DriverObjectExtension = NewDriverExtension + 1;
1915 while (DriverExtensions)
1933 if (!DriverExtensions)
return NULL;
1934 return DriverExtensions + 1;
1983 DPRINT(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1987 DPRINT(
"FullImagePath: '%wZ'\n", &ImagePath);
1995 DPRINT(
"Loading module from %wZ\n", &ImagePath);
2001 DPRINT(
"MmLoadSystemImage() failed (Status %lx)\n",
Status);
2015 Status = ZwQueryKey(ServiceHandle,
2025 .Buffer = servName->
Name
2038 &driverEntryStatus);
2041 DPRINT1(
"IopInitializeDriverModule() failed (Status %lx)\n",
Status);
2128 return LoadParams.
Status;
2161 DPRINT1(
"No load privilege!\n");
2174 DPRINT(
"NtLoadDriver('%wZ')\n", &CapturedServiceName);
NTSTATUS NtUnloadDriver(IN PUNICODE_STRING DriverServiceName)
#define STATUS_PRIVILEGE_NOT_HELD
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)
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....
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
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()
PLOADER_PARAMETER_BLOCK KeLoaderBlock
#define FILESYSTEM_ROOT_NAME
#define LDRP_DRIVER_DEPENDENT_DLL
#define MM_SYSLDR_NO_IMPORTS
#define ExFreePoolWithTag(_P, _T)
#define InitializeObjectAttributes(p, n, a, r, s)
#define _At_(target, annos)
#define _When_(expr, annos)
_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 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 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)
PPCI_DRIVER_EXTENSION DriverExtension
LIST_ENTRY PsLoadedModuleList
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
base of all file and directory entries
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
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
PUNICODE_STRING RegistryPath
PDRIVER_OBJECT DriverObject
#define TAG_DRIVER_EXTENSION
#define RTL_CONSTANT_STRING(s)
#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
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
_In_ KPROCESSOR_MODE PreviousMode