55 #if defined(ALLOC_PRAGMA) 56 #pragma alloc_text(INIT, DriverEntry) 57 #pragma alloc_text(INIT, MupInitializeData) 58 #pragma alloc_text(INIT, MupInitializeVcb) 115 Vcb->NodeReferences = 1;
134 KeyName.Buffer =
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\Mup";
135 KeyName.Length =
sizeof(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\Mup") -
sizeof(
UNICODE_NULL);
136 KeyName.MaximumLength =
sizeof(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\Mup");
155 KeyName.MaximumLength =
sizeof(
L"DisableDfs");
164 return ((
ULONG_PTR)KeyQueryOutput.KeyInfo.Data != 1);
189 Ccb->NodeReferences = 1;
208 Fcb->NodeReferences = 1;
222 if (MasterIoContext ==
NULL)
232 return MasterIoContext;
241 if (UncProvider ==
NULL)
261 PrefixSize =
sizeof(
MUP_PFX) + PrefixLength;
271 Prefix->NodeReferences = 1;
272 Prefix->NodeSize = PrefixSize;
275 if (PrefixLength != 0)
300 if (MasterQueryContext ==
NULL)
313 return MasterQueryContext;
341 ++
Fcb->NodeReferences;
398 if (NewStatus !=
NULL)
416 Irp = MasterIoContext->
Irp;
420 Irp->IoStatus.Information =
Stack->Parameters.Write.Length;
424 Irp->IoStatus.Information = 0;
653 if (LowerIrp ==
NULL)
661 LowerIrp->Tail.Overlay.Thread =
Irp->Tail.Overlay.Thread;
679 LowerIrp->AssociatedIrp.SystemBuffer =
NULL;
681 if (
Stack->Parameters.Write.Length == 0)
696 Stack->Parameters.Write.Length,
698 if (LowerIrp->AssociatedIrp.SystemBuffer ==
NULL)
704 RtlMoveMemory(LowerIrp->AssociatedIrp.SystemBuffer,
Irp->UserBuffer,
Stack->Parameters.Write.Length);
712 LowerIrp->UserBuffer =
Irp->UserBuffer;
717 if (
Stack->Parameters.Write.Length != 0)
766 if (LowerIrp !=
NULL)
768 if (LowerIrp->AssociatedIrp.SystemBuffer ==
NULL)
820 if (MasterIoContext ==
NULL)
829 MasterIoContext->
Irp =
Irp;
834 MasterIoContext->
Fcb =
Fcb;
839 CcbLockAcquired =
TRUE;
848 CcbLockAcquired =
FALSE;
857 CcbLockAcquired =
TRUE;
861 CcbLockAcquired =
FALSE;
890 ULONG StrLen, NameLen;
894 StrLen = NameLen *
sizeof(
WCHAR);
896 if (UncProvider ==
NULL)
902 UncProvider->DeviceName.MaximumLength = StrLen;
903 UncProvider->DeviceName.Length = StrLen;
905 UncProvider->ProviderOrder = ProviderOrder;
932 NameLen =
wcslen(ProviderName);
933 StrLen = NameLen *
sizeof(
WCHAR) +
sizeof(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\") +
sizeof(
L"\\NetworkProvider");
940 RtlMoveMemory(
Key.Buffer,
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\",
sizeof(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"));
941 Key.MaximumLength = StrLen;
942 Key.Length =
sizeof(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\") -
sizeof(
UNICODE_NULL);
1000 PWSTR Providers, Coma;
1007 RtlInitUnicodeString(&NetworkProvider,
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\NetworkProvider\\Order");
1054 Coma =
wcschr(Providers,
L',');
1067 Providers = Coma + 1;
1162 if (UncProvider ==
NULL)
1167 if (UncProvider ==
NULL)
1207 Stack->FileObject->FsContext2 = UncProvider;
1346 if (FullPath ==
NULL)
1393 CcbInitialized =
FALSE;
1395 LastOrder = (
ULONG)-1;
1493 ++
Fcb->NodeReferences;
1496 CcbInitialized =
TRUE;
1545 ULONG InputBufferSize,
1547 ULONG OutputBufferSize,
1578 Stack->Parameters.DeviceIoControl.OutputBufferLength = OutputBufferSize;
1579 Stack->Parameters.DeviceIoControl.InputBufferLength = InputBufferSize;
1581 Stack->MinorFunction = 0;
1618 Irp->AssociatedIrp.SystemBuffer =
NULL;
1645 if (References != 0)
1647 DPRINT(
"Still having refs (%ld)\n", References);
1654 if (MasterQueryContext->
Irp ==
NULL)
1701 MasterQueryContext->
Irp =
NULL;
1715 PWSTR AcceptedPrefix;
1792 if (AcceptedPrefix ==
NULL)
1849 while (TableStatus != 0 && TableStatus != MasterQueryContext->
LatestStatus)
1873 while (
Pos < LatestPos);
1876 if (
Pos >= LatestPos)
1929 BreakOnFirst =
TRUE;
1939 DPRINT(
"Matching prefix found: %wZ\n", &
Prefix->AcceptedPrefix);
1989 }
while (Cur !=
L'\\');
2038 if (MasterQueryContext ==
NULL)
2048 MasterQueryContext->
Irp =
Irp;
2055 ++
Prefix->NodeReferences;
2079 if (QueryPathRequest ==
NULL)
2089 if (QueryContext ==
NULL)
2112 if (QueryIrp ==
NULL)
2121 QueryContext->
Irp = QueryIrp;
2151 BreakOnFirst =
FALSE;
2203 ++
Vcb->NodeReferences;
2239 RelatedFileObject =
FileObject->RelatedFileObject;
2251 Stack->Parameters.Create.SecurityContext->DesiredAccess,
2252 Stack->Parameters.Create.ShareAccess);
#define KeQuerySystemTime(t)
#define KeGetCurrentIrql()
BOOLEAN MuppIsDfsEnabled(VOID)
NTSTATUS NTAPI DfsVolumePassThrough(PDEVICE_OBJECT DeviceObject, PIRP Irp)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
VOID MupInitializeVcb(PMUP_VCB Vcb)
NTSTATUS MupCloseFcb(PDEVICE_OBJECT DeviceObject, PIRP Irp, PMUP_FCB Fcb, PFILE_OBJECT FileObject)
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
VOID MupSetFileObject(PFILE_OBJECT FileObject, PMUP_FCB Fcb, PMUP_CCB Ccb)
NTSTATUS BuildAndSubmitIrp(PIRP Irp, PMUP_CCB Ccb, PMUP_MIC MasterIoContext)
_In_ __drv_aliasesMem PSTRING Prefix
#define STATUS_REDIRECTOR_NOT_STARTED
VOID NTAPI ExQueueWorkItem(IN PWORK_QUEUE_ITEM WorkItem, IN WORK_QUEUE_TYPE QueueType)
#define STATUS_INSUFFICIENT_RESOURCES
WORK_QUEUE_ITEM WorkQueueItem
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define FsRtlEnterFileSystem
#define IRP_MJ_CREATE_MAILSLOT
PVOID NTAPI ExAllocatePoolWithQuotaTag(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
struct _QUERY_PATH_RESPONSE * PQUERY_PATH_RESPONSE
VOID MupDereferenceKnownPrefix(PMUP_PFX Prefix)
#define OBJ_CASE_INSENSITIVE
#define PsGetCurrentThread()
UNICODE_PREFIX_TABLE MupPrefixTable
#define FsRtlExitFileSystem
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
LIST_ENTRY ProviderListEntry
#define STATUS_MORE_PROCESSING_REQUIRED
NTSTATUS DfsFsdCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define FILE_DEVICE_DFS_FILE_SYSTEM
#define STATUS_INVALID_PARAMETER
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
VOID NTAPI MupUnload(PDRIVER_OBJECT DriverObject)
#define FILE_DIRECTORY_FILE
#define FILE_ATTRIBUTE_VALID_FLAGS
VOID NTAPI RtlRemoveUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry)
_In_ __drv_aliasesMem PSTRING _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry
struct _QUERY_PATH_CONTEXT * PQUERY_PATH_CONTEXT
#define NODE_STATUS_CLEANUP
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
BOOLEAN MailslotsSupported
NTSTATUS ExInitializeResourceLite(PULONG res)
NTSTATUS NTAPI ExDeleteResourceLite(IN PERESOURCE Resource)
#define STATUS_INVALID_DEVICE_REQUEST
#define FILE_VALID_SET_FLAGS
VOID MupUninitializeData()
VOID NTAPI MmUnlockPages(IN PMDL Mdl)
VOID MupInitializeData(VOID)
VOID MupDereferenceVcb(PMUP_VCB Vcb)
LIST_ENTRY QueryPathListEntry
VOID NTAPI RtlInitializeUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable)
NTSTATUS DfsFsdClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
PDEVICE_OBJECT DeviceObject
PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject(IN PFILE_OBJECT FileObject)
LIST_ENTRY MupMasterQueryList
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG IoctlCode
#define FO_NO_INTERMEDIATE_BUFFERING
#define InsertTailList(ListHead, Entry)
#define OBJ_KERNEL_HANDLE
NTSTATUS OpenMupFileSystem(PMUP_VCB Vcb, PFILE_OBJECT FileObject, ACCESS_MASK DesiredAccess, USHORT ShareAccess)
PMUP_MIC MupAllocateMasterIoContext(VOID)
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK _In_ USHORT ShareAccess
VOID NTAPI IoRemoveShareAccess(IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess)
NTSTATUS MupCloseVcb(PDEVICE_OBJECT DeviceObject, PIRP Irp, PMUP_VCB Vcb, PFILE_OBJECT FileObject)
#define STATUS_INVALID_HANDLE
NTSTATUS MupDereferenceMasterIoContext(PMUP_MIC MasterIoContext, PNTSTATUS NewStatus)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_BUFFER_TOO_SMALL
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
struct _FCB::@702::@705 Fcb
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ PDEVICE_OBJECT DeviceObject
ERESOURCE MupPrefixTableLock
return STATUS_NOT_IMPLEMENTED
NTSTATUS DfsFsdFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
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)
UNICODE_STRING DeviceName
#define IO_DISK_INCREMENT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PMUP_PFX MupAllocatePrefixEntry(ULONG PrefixLength)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
pRequest Complete(RequestStatus)
#define IO_NO_PARAMETER_CHECKING
NTSTATUS MupOrderedErrorList[]
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
NTSTATUS NTAPI MupCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
PQUERY_PATH_REQUEST QueryPathRequest
LARGE_INTEGER MupKnownPrefixTimeout
#define STATUS_INVALID_USER_BUFFER
#define STATUS_BAD_NETWORK_PATH
#define EXCEPTION_EXECUTE_HANDLER
PDEVICE_OBJECT DeviceObject
NTSTATUS CreateRedirectedFile(PIRP Irp, PFILE_OBJECT FileObject, PIO_SECURITY_CONTEXT SecurityContext)
VOID MupCloseUncProvider(PMUP_UNC UncProvider)
#define _SEH2_AbnormalTermination()
#define IoCompleteRequest
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFKEY * Key
VOID MupCalculateTimeout(PLARGE_INTEGER EntryTime)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
PMUP_FCB MupCreateFcb(VOID)
NTSTATUS DfsFsdCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define InterlockedExchangeAdd
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
PMUP_UNC MupAllocateUncProvider(ULONG RedirectorDeviceNameLength)
#define STATUS_NAME_TOO_LONG
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
NTSTATUS MupDereferenceMasterQueryContext(PMUP_MQC MasterQueryContext)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
NTSTATUS CommonForwardedIoCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PFORWARDED_IO_CONTEXT FwdCtxt)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
struct _LIST_ENTRY * Flink
#define METHOD_OUT_DIRECT
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
#define ExInitializeWorkItem(Item, Routine, Context)
#define STATUS_BAD_NETWORK_NAME
NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
VOID MupDereferenceUncProvider(PMUP_UNC UncProvider)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
VOID MupFreeMasterQueryContext(PMUP_MQC MasterQueryContext)
NTSTATUS NTAPI MupFsControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
ERESOURCE QueryPathListLock
#define NT_SUCCESS(StatCode)
ULONG MupDecodeFileObject(PFILE_OBJECT FileObject, PMUP_FCB *pFcb, PMUP_CCB *pCcb)
#define IRP_MJ_FILE_SYSTEM_CONTROL
#define ObDereferenceObject
NTSTATUS DfsDriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
VOID MupRemoveKnownPrefixEntry(PMUP_PFX Prefix)
PUNICODE_PREFIX_TABLE_ENTRY NTAPI RtlFindUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, PUNICODE_STRING FullName, ULONG CaseInsensitiveIndex)
#define STATUS_ACCESS_DENIED
#define FSCTL_MUP_REGISTER_PROVIDER
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
VOID NTAPI IoFreeMdl(PMDL Mdl)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
struct _MUP_PROVIDER_REGISTRATION_INFO * PMUP_PROVIDER_REGISTRATION_INFO
VOID MupFreeNode(PVOID Node)
PMUP_MQC MupAllocateMasterQueryContext(VOID)
VOID MupDereferenceCcb(PMUP_CCB Ccb)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID MupCleanupVcb(PDEVICE_OBJECT DeviceObject, PIRP Irp, PMUP_VCB Vcb)
#define InterlockedDecrement
NTSTATUS NTAPI MupForwardIoRequest(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define FILE_SIMPLE_RIGHTS_MASK
VOID MupDereferenceFcb(PMUP_FCB Fcb)
ULONG RedirectorDeviceNameOffset
NTSTATUS NTAPI MupCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
LIST_ENTRY MupProviderList
BOOLEAN NTAPI RtlInsertUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, PUNICODE_STRING Prefix, PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry)
static const WCHAR Cleanup[]
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
PMUP_UNC AddUnregisteredProvider(PCWSTR DeviceName, ULONG ProviderOrder)
#define FILE_SHARE_VALID_FLAGS
PMDL NTAPI IoAllocateMdl(IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN PIRP Irp)
NTSTATUS MupRerouteOpen(PFILE_OBJECT FileObject, PMUP_UNC UncProvider)
NTSTATUS NTAPI IoCheckShareAccess(IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess, IN BOOLEAN Update)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PIO_SECURITY_CONTEXT SecurityContext
#define IOCTL_REDIR_QUERY_PATH
#define IRP_INPUT_OPERATION
VOID NTAPI DeferredForwardedIoCompletionRoutine(PVOID Context)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
ULONG RedirectorDeviceNameLength
#define IO_METHOD_FROM_CTL_CODE(C)
BOOLEAN MailslotsSupported
#define InitializeListHead(ListHead)
struct _FORWARDED_IO_CONTEXT * PFORWARDED_IO_CONTEXT
VOID MupInvalidatePrefixTable(VOID)
#define STATUS_NO_SUCH_FILE
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
static OUT PIO_STATUS_BLOCK IoStatusBlock
PMUP_UNC MupCheckForUnregisteredProvider(PUNICODE_STRING RedirectorDeviceName)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PMUP_MQC MasterQueryContext
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
PDEVICE_OBJECT mupDeviceObject
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
#define DFS_DOWNLEVEL_OPEN_CONTEXT
_Must_inspect_result_ typedef _In_ ULONG TableEntry
NTSTATUS NTAPI IoCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG Disposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength, IN CREATE_FILE_TYPE CreateFileType, IN PVOID ExtraCreateParameters OPTIONAL, IN ULONG Options)
#define IRP_DEALLOCATE_BUFFER
NTSTATUS BroadcastOpen(PIRP Irp)
NTSTATUS NTAPI QueryPathCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
VOID MupCleanupFcb(PDEVICE_OBJECT DeviceObject, PIRP Irp, PMUP_FCB Fcb)
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 MupClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
VOID InitializeProvider(PCWSTR ProviderName, ULONG ProviderOrder)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
PIRP MupBuildIoControlRequest(PFILE_OBJECT FileObject, PVOID Context, ULONG MajorFunction, ULONG IoctlCode, PVOID InputBuffer, ULONG InputBufferSize, PVOID OutputBuffer, ULONG OutputBufferSize, PIO_COMPLETION_ROUTINE CompletionRoutine)
#define _SEH2_EXCEPT(...)
#define ExFreePoolWithTag(_P, _T)
#define _SEH2_GetExceptionCode()
#define IRP_WRITE_OPERATION
#define NODE_STATUS_HEALTHY
unsigned short MaximumLength
PMUP_CCB MupCreateCcb(VOID)
VOID MupGetProviderInformation(VOID)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSTATUS NTAPI ForwardedIoCompletionRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
FORCEINLINE VOID IoSetNextIrpStackLocation(_Inout_ PIRP Irp)
#define FILE_DEVICE_MULTI_UNC_PROVIDER
base of all file and directory entries
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
BOOLEAN MupOrderInitialized
#define IRP_MJ_CREATE_NAMED_PIPE
NTSTATUS RegisterUncProvider(PDEVICE_OBJECT DeviceObject, PIRP Irp)
UNICODE_STRING RedirectorDeviceName
VOID DfsUnload(PDRIVER_OBJECT DriverObject)
#define IRP_MJ_DEVICE_CONTROL