33GUID MountedDevicesGuid = {0x53F5630D, 0xB6BF, 0x11D0, {0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B}};
40#define Cunc_LETTER_POSITION 4
89 for (NextEntry = DeviceInformation->SymbolicLinksListHead.
Flink;
90 NextEntry != &DeviceInformation->SymbolicLinksListHead;
91 NextEntry = NextEntry->
Flink)
117 DriveLetter->Buffer =
AllocatePool(DriveLetter->MaximumLength);
118 if (!DriveLetter->Buffer)
245 *GptDriveLetter =
TRUE;
256 sizeof(GptAttributes),
280 else if (GptAttributes.
GptAttributes & GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER)
282 *GptDriveLetter =
FALSE;
340 &StorageDeviceNumber,
341 sizeof(StorageDeviceNumber),
667 for (NextEntry = DeviceExtension->DeviceListHead.
Flink;
668 NextEntry != &(DeviceExtension->DeviceListHead);
669 NextEntry = NextEntry->
Flink)
682 if (!DeviceNameGiven)
688 if (NextEntry == &(DeviceExtension->DeviceListHead))
703 FreePool(DeviceInformation->SymbolicName.Buffer);
719 while (!
IsListEmpty(&(DeviceInformation->SymbolicLinksListHead)))
721 NextEntry =
RemoveHeadList(&(DeviceInformation->SymbolicLinksListHead));
729 while (!
IsListEmpty(&(DeviceInformation->ReplicatedUniqueIdsListHead)))
731 NextEntry =
RemoveHeadList(&(DeviceInformation->ReplicatedUniqueIdsListHead));
738 while (!
IsListEmpty(&(DeviceInformation->AssociatedDevicesHead)))
740 NextEntry =
RemoveHeadList(&(DeviceInformation->AssociatedDevicesHead));
748 FreePool(DeviceInformation->SymbolicName.Buffer);
749 if (DeviceInformation->KeepLinks)
751 FreePool(DeviceInformation->UniqueId);
753 FreePool(DeviceInformation->DeviceName.Buffer);
756 if (DeviceInformation->TargetDeviceNotificationEntry)
772 while (!
IsListEmpty(&(SavedLinkInformation->SymbolicLinksListHead)))
774 NextEntry =
RemoveHeadList(&(SavedLinkInformation->SymbolicLinksListHead));
784 FreePool(SavedLinkInformation->UniqueId);
809 if (DeviceExtension->RegistryPath.Buffer)
811 FreePool(DeviceExtension->RegistryPath.Buffer);
812 DeviceExtension->RegistryPath.Buffer =
NULL;
840 while (!
IsListEmpty(&(DeviceExtension->OfflineDeviceListHead)))
842 NextEntry =
RemoveHeadList(&(DeviceExtension->OfflineDeviceListHead));
848 while (!
IsListEmpty(&(DeviceExtension->SavedLinksListHead)))
850 NextEntry =
RemoveHeadList(&(DeviceExtension->SavedLinksListHead));
856 while (!
IsListEmpty(&(DeviceExtension->UniqueIdWorkerItemListHead)))
858 NextEntry =
RemoveHeadList(&(DeviceExtension->UniqueIdWorkerItemListHead));
880 if (DeviceExtension->DriveLetterData)
882 FreePool(DeviceExtension->DriveLetterData);
883 DeviceExtension->DriveLetterData =
NULL;
921 return (Default != 0);
949 BOOLEAN HasGuid, HasGptDriveLetter, Valid, UseOnlyIfThereAreNoOtherLinks, IsDrvLetter, IsOff, IsVolumeName, LinkError;
953 if (!DeviceInformation)
991 for (NextEntry = DeviceExtension->OfflineDeviceListHead.
Flink;
992 NextEntry != &(DeviceExtension->OfflineDeviceListHead);
993 NextEntry = NextEntry->
Flink)
1003 if (NextEntry != &(DeviceExtension->OfflineDeviceListHead))
1018 DeviceInformation->
UniqueId = UniqueId;
1019 DeviceInformation->
DeviceName = TargetDeviceName;
1023 if (DeviceExtension->DriveLetterData && UniqueId->
UniqueIdLength == DeviceExtension->DriveLetterData->UniqueIdLength)
1035 &UseOnlyIfThereAreNoOtherLinks);
1051 for (NextEntry = DeviceExtension->DeviceListHead.
Flink;
1052 NextEntry != &(DeviceExtension->DeviceListHead);
1053 NextEntry = NextEntry->
Flink)
1064 if (NextEntry != &(DeviceExtension->DeviceListHead))
1066 if (SuggestedLinkName.
Buffer)
1084 (SuggestedLinkName.
Buffer) ? &SuggestedLinkName :
NULL,
1085 UseOnlyIfThereAreNoOtherLinks,
1145 for (
i = 0;
i < SymLinkCount;
i++)
1166 if (SuggestedLinkName.
Buffer)
1181 IsDrvLetter =
FALSE;
1183 IsVolumeName =
FALSE;
1185 for (
i = 0;
i < SymLinkCount;
i++)
1190 IsVolumeName =
TRUE;
1212 if ((SavedLinkInformation && !
RedirectSavedLink(SavedLinkInformation, &(SymLinks[
i]), &TargetDeviceName)) ||
1213 !SavedLinkInformation)
1226 IsDrvLetter =
FALSE;
1244 if (!SymlinkInformation)
1251 SymlinkInformation->
Name = SymLinks[
i];
1261 NextEntry = NextEntry->
Flink)
1269 if (SavedLinkInformation)
1293 if (!SymlinkInformation)
1316 else if ((DeviceExtension->NoAutoMount || DeviceInformation->
Removable) &&
1317 DeviceExtension->AutomaticDriveLetter &&
1341 if (!SymlinkInformation)
1347 SymlinkInformation->
Name = DriveLetter;
1358 if (!ManuallyRegistered)
1383 if (DeviceExtension->NoAutoMount || IsDrvLetter)
1417 if (DeviceExtension->AutomaticDriveLetter)
1423 NextEntry = DeviceExtension->DeviceListHead.
Flink;
1425 while (CurrentDevice != DeviceInformation)
1432 NextEntry = NextEntry->
Flink;
1460 for (NextEntry = DeviceExtension->DeviceListHead.
Flink;
1461 NextEntry != &(DeviceExtension->DeviceListHead);
1462 NextEntry = NextEntry->
Flink)
1473 if (NextEntry != &(DeviceExtension->DeviceListHead))
1479 if (!SavedLinkInformation)
1540 for (NextEntry = DeviceExtension->DeviceListHead.
Flink;
1541 NextEntry != &(DeviceExtension->DeviceListHead);
1542 NextEntry = NextEntry->
Flink)
1551 DeviceEntry = DeviceEntry->
Flink;
1585 for (NextEntry = DeviceExtension->OfflineDeviceListHead.
Flink;
1586 NextEntry != &(DeviceExtension->OfflineDeviceListHead);
1587 NextEntry = NextEntry->
Flink)
1666 Irp->IoStatus.Information = 0;
1685 Irp->IoStatus.Information = 0;
1717 Irp->IoStatus.Information = 0;
1724 NextEntry = DeviceExtension->IrpListHead.Flink;
1730 ListIrp->Cancel =
TRUE;
1731 ListIrp->CancelIrql =
OldIrql;
1732 ListIrp->CancelRoutine =
NULL;
1738 NextEntry = NextEntry->
Flink;
1740 while (NextEntry != &(DeviceExtension->IrpListHead));
1745 Irp->IoStatus.Information = 0;
1782 Irp->IoStatus.Information = 0;
1828 DeviceExtension->EpicNumber = 1;
1834 DeviceExtension->WorkerReferences = -1;
1839 DeviceExtension->OnlineNotificationCount = 1;
1841 DeviceExtension->RegistryPath.Length =
RegistryPath->Length;
1842 DeviceExtension->RegistryPath.MaximumLength =
RegistryPath->Length +
sizeof(
WCHAR);
1843 DeviceExtension->RegistryPath.Buffer =
AllocatePool(DeviceExtension->RegistryPath.MaximumLength);
1844 if (!DeviceExtension->RegistryPath.Buffer)
1865 &(DeviceExtension->NotificationEntry));
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
#define FILE_DIRECTORY_FILE
#define FILE_DEVICE_SECURE_OPEN
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
DRIVER_INITIALIZE DriverEntry
VOID ReconcileThisDatabaseWithMaster(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation)
VOID DeleteFromLocalDatabase(IN PUNICODE_STRING SymbolicLink, IN PMOUNTDEV_UNIQUE_ID UniqueId)
const GUID GUID_DEVICE_INTERFACE_ARRIVAL
const GUID GUID_DEVICE_INTERFACE_REMOVAL
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define PsGetCurrentThread()
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define RtlCompareMemory(s1, s2, l)
#define KeInitializeEvent(pEvt, foo, foo2)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
#define IOCTL_DISK_GET_PARTITION_INFO_EX
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
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
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG)
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
NTSTATUS QuerySymbolicLinkNamesFromStorage(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation, IN PUNICODE_STRING SuggestedLinkName, IN BOOLEAN UseOnlyIfThereAreNoOtherLinks, OUT PUNICODE_STRING *SymLinks, OUT PULONG SymLinkCount, IN BOOLEAN HasGuid, IN LPGUID Guid)
VOID SendLinkCreated(IN PUNICODE_STRING SymbolicName)
VOID SendOnlineNotification(IN PUNICODE_STRING SymbolicName)
NTSTATUS GlobalCreateSymbolicLink(IN PUNICODE_STRING DosName, IN PUNICODE_STRING DeviceName)
NTSTATUS GlobalDeleteSymbolicLink(IN PUNICODE_STRING DosName)
DRIVER_DISPATCH MountMgrDeviceControl
UNICODE_STRING DeviceFloppy
UNICODE_STRING DosDevicesMount
BOOLEAN IsDriveLetter(PUNICODE_STRING SymbolicName)
UNICODE_STRING DeviceMount
NTSTATUS CreateNewVolumeName(OUT PUNICODE_STRING VolumeName, IN PGUID VolumeGuid OPTIONAL)
UNICODE_STRING DeviceCdRom
VOID RegisterForTargetDeviceNotification(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation)
VOID IssueUniqueIdChangeNotify(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING DeviceName, IN PMOUNTDEV_UNIQUE_ID UniqueId)
NTSTATUS QuerySuggestedLinkName(IN PUNICODE_STRING SymbolicName, OUT PUNICODE_STRING SuggestedLinkName, OUT PBOOLEAN UseOnlyIfThereAreNoOtherLinks)
PSAVED_LINK_INFORMATION RemoveSavedLinks(IN PDEVICE_EXTENSION DeviceExtension, IN PMOUNTDEV_UNIQUE_ID UniqueId)
#define AllocatePool(Size)
UNICODE_STRING DosDevices
VOID CreateNoDriveLetterEntry(IN PMOUNTDEV_UNIQUE_ID UniqueId)
BOOLEAN HasNoDriveLetterEntry(IN PMOUNTDEV_UNIQUE_ID UniqueId)
BOOLEAN RedirectSavedLink(IN PSAVED_LINK_INFORMATION SavedLinkInformation, IN PUNICODE_STRING DosName, IN PUNICODE_STRING NewLink)
struct _MOUNTDEV_NAME MOUNTDEV_NAME
struct _MOUNTDEV_UNIQUE_ID MOUNTDEV_UNIQUE_ID
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
#define IOCTL_MOUNTDEV_QUERY_STABLE_GUID
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
VOID NTAPI MountMgrUnload(IN struct _DRIVER_OBJECT *DriverObject)
NTSTATUS NTAPI MountMgrShutdown(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN IsOffline(PUNICODE_STRING SymbolicName)
BOOLEAN MountmgrReadNoAutoMount(IN PUNICODE_STRING RegistryPath)
NTSTATUS NTAPI MountMgrMountedDeviceNotification(IN PVOID NotificationStructure, IN PVOID Context)
NTSTATUS QueryDeviceInformation(IN PUNICODE_STRING SymbolicName, OUT PUNICODE_STRING DeviceName OPTIONAL, OUT PMOUNTDEV_UNIQUE_ID *UniqueId OPTIONAL, OUT PBOOLEAN Removable OPTIONAL, OUT PBOOLEAN GptDriveLetter OPTIONAL, OUT PBOOLEAN HasGuid OPTIONAL, IN OUT LPGUID StableGuid OPTIONAL, OUT PBOOLEAN Valid OPTIONAL)
NTSTATUS MountMgrMountedDeviceArrival(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicName, IN BOOLEAN ManuallyRegistered)
NTSTATUS FindDeviceInfo(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicName, IN BOOLEAN DeviceNameGiven, OUT PDEVICE_INFORMATION *DeviceInformation)
VOID MountMgrFreeMountedDeviceInfo(IN PDEVICE_INFORMATION DeviceInformation)
static const WCHAR Cunc[]
PDEVICE_OBJECT gdeviceObject
NTSTATUS NTAPI MountMgrCleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define Cunc_LETTER_POSITION
VOID NTAPI MountMgrCancel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS CreateNewDriveLetterName(OUT PUNICODE_STRING DriveLetter, IN PUNICODE_STRING DeviceName, IN UCHAR Letter, IN PMOUNTDEV_UNIQUE_ID UniqueId OPTIONAL)
VOID MountMgrFreeDeadDeviceInfo(IN PDEVICE_INFORMATION DeviceInformation)
BOOLEAN HasDriveLetter(IN PDEVICE_INFORMATION DeviceInformation)
VOID MountMgrMountedDeviceRemoval(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING DeviceName)
VOID MountMgrFreeSavedLink(IN PSAVED_LINK_INFORMATION SavedLinkInformation)
NTSTATUS NTAPI MountMgrCreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define MOUNTMGR_IS_VOLUME_NAME(s)
_In_ PNDIS_STRING _In_ PNDIS_STRING SymbolicName
NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject(_Out_ PHANDLE SymbolicLinkHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI RtlCreateRegistryKey(_In_ ULONG RelativeTo, _In_ PWSTR Path)
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define SYMBOLIC_LINK_QUERY
#define FILE_READ_ATTRIBUTES
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 BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
#define FILE_REMOVABLE_MEDIA
#define UNREFERENCED_PARAMETER(P)
#define IsRecognizedPartition(PartitionType)
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
NTSTATUS NTAPI IoRegisterShutdownNotification(PDEVICE_OBJECT DeviceObject)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
VOID NTAPI IoUnregisterShutdownNotification(PDEVICE_OBJECT DeviceObject)
#define IoCompleteRequest
BOOLEAN NTAPI IoCancelIrp(IN PIRP Irp)
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
NTSTATUS NTAPI IoSetSystemPartition(IN PUNICODE_STRING VolumeNameString)
VOID NTAPI PsSetThreadHardErrorsAreDisabled(IN PETHREAD Thread, IN BOOLEAN HardErrorsAreDisabled)
BOOLEAN NTAPI PsGetThreadHardErrorsAreDisabled(IN PETHREAD Thread)
NTSTATUS NTAPI IoRegisterPlugPlayNotification(_In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, _In_ ULONG EventCategoryFlags, _In_opt_ PVOID EventCategoryData, _In_ PDRIVER_OBJECT DriverObject, _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, _Inout_opt_ PVOID Context, _Out_ PVOID *NotificationEntry)
NTSTATUS NTAPI IoUnregisterPlugPlayNotification(_In_ PVOID NotificationEntry)
#define IsEqualGUID(rguid1, rguid2)
#define FILE_DEVICE_NETWORK
#define IRP_MJ_DEVICE_CONTROL
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
#define STATUS_BUFFER_OVERFLOW
PULONG MinorVersion OPTIONAL
struct _LIST_ENTRY * Flink
PMOUNTDEV_UNIQUE_ID UniqueId
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_NOT_A_DIRECTORY
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_ PWDFDEVICE_INIT _In_ PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION Notification
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_In_ WDFDEVICE AssociatedDevice
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo
_In_ PVOID NotificationStructure
@ EventCategoryDeviceInterfaceChange
#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ObDereferenceObject
_Inout_ PUNICODE_STRING LinkTarget