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,
541 (
PVOID*)&driverObject);
548 DPRINT1(
"Error while creating driver object \"%wZ\" status %x\n", &DriverName,
Status);
552 DPRINT(
"Created driver object 0x%p for \"%wZ\"\n", driverObject, &DriverName);
564 driverObject->
DriverSize = ModuleObject->SizeOfImage;
565 driverObject->
DriverInit = ModuleObject->EntryPoint;
593 (
PVOID*)&driverObject,
609 serviceKeyName.
Length = 0;
615 if (!serviceKeyName.
Buffer)
632 driverNamePaged.
Length = 0;
638 if (!driverNamePaged.
Buffer)
652 *DriverEntryStatus =
Status;
655 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &DriverName,
Status);
664 driverObject->
Flags &= ~DRVO_LEGACY_DRIVER;
680 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
701 *OutDriverObject = driverObject;
737 PVOID DriverBase = LdrEntry->DllBase;
761 BaseLength *=
sizeof(
WCHAR);
798 *ModuleObject = LdrEntry;
846 if (FileNameWithoutPath ==
NULL)
848 FileNameWithoutPath =
Buffer;
852 FileNameWithoutPath++;
866 if (FileExtension !=
NULL)
897 NextEntry = NextEntry->
Flink)
941 ULONG instanceCount = 0;
959 DPRINT(
"Processing %u instances for %wZ module\n", instanceCount,
ModuleName);
961 for (
ULONG i = 0;
i < instanceCount;
i++)
977 DPRINT1(
"ObjectName invalid (Type = %lu, DataLength = %lu)\n",
1005 DPRINT1(
"No device node found matching instance path '%wZ'\n", &instancePath);
1045 DPRINT(
"IopInitializeBootDrivers()\n");
1078 for (NextEntry = ListHead->
Flink;
1079 NextEntry != ListHead;
1080 NextEntry = NextEntry->
Flink)
1097 for (NextEntry = ListHead->
Flink;
1098 NextEntry != ListHead;
1099 NextEntry = NextEntry->
Flink)
1166 NextEntry2 = NextEntry2->
Flink;
1170 NextEntry2 = NextEntry2->
Blink;
1182 NextEntry = NextEntry->
Flink)
1239 ZwLoadDriver(*DriverList);
1304 DPRINT1(
"No unload privilege!\n");
1317 DPRINT(
"IopUnloadDriver('%wZ', %u)\n", &CapturedServiceName, UnloadPnpDrivers);
1330 &CapturedServiceName,
1394 DPRINT1(
"Driver deletion pending\n");
1412 CapturedServiceName.
Buffer,
1422 DPRINT1(
"RtlQueryRegistryValues() failed (Status %x)\n",
Status);
1434 DPRINT1(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
1463 DPRINT1(
"Drivers device object is referenced or has attached devices\n");
1465 SafeToUnload =
FALSE;
1496 DPRINT1(
"No DriverUnload function! '%wZ' will not be unloaded!\n", &
DriverObject->DriverName);
1592 WCHAR NameBuffer[100];
1611 LocalDriverName.
Length = NameLength *
sizeof(
WCHAR);
1613 LocalDriverName.
Buffer = NameBuffer;
1618 LocalDriverName = *DriverName;
1661 if (!ServiceKeyName.
Buffer)
1672 DriverObject->DriverExtension->ServiceKeyName = ServiceKeyName;
1727 DPRINT(
"Calling driver entrypoint at %p\n", InitializationFunction);
1732 DPRINT1(
"'%wZ' initialization failed, status (0x%08lx)\n", &LocalDriverName,
Status);
1751 DPRINT1(
"Driver <%wZ> set DriverObject->MajorFunction[%lu] to NULL!\n",
1790 if (!ReinitItem)
return;
1819 if (!ReinitItem)
return;
1840 IN ULONG DriverObjectExtensionSize,
1848 *DriverObjectExtension =
NULL;
1853 DriverObjectExtensionSize,
1869 ClientDriverExtension;
1870 while (DriverExtensions)
1885 if (!DriverExtensions)
1907 *DriverObjectExtension = NewDriverExtension + 1;
1927 while (DriverExtensions)
1945 if (!DriverExtensions)
return NULL;
1946 return DriverExtensions + 1;
1968 DPRINT1(
"ObjectName invalid (Type = %lu, DataLength = %lu)\n",
2001 DPRINT(
"IopNormalizeImagePath() failed (Status %x)\n",
Status);
2005 DPRINT(
"FullImagePath: '%wZ'\n", &ImagePath);
2013 DPRINT(
"Loading module from %wZ\n", &ImagePath);
2019 DPRINT(
"MmLoadSystemImage() failed (Status %lx)\n",
Status);
2033 Status = ZwQueryKey(ServiceHandle,
2043 .Buffer = servName->
Name
2056 &driverEntryStatus);
2059 DPRINT1(
"IopInitializeDriverModule() failed (Status %lx)\n",
Status);
2146 return LoadParams.
Status;
2179 DPRINT1(
"No load privilege!\n");
2192 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)
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)
_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 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)
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