27 #pragma warning(disable:4201) 28 #pragma warning(disable:4214) 29 #pragma warning(disable:4100) 32 #define MIN_INDEXED_LENGTH 5 33 #define MAX_INDEXED_LENGTH 9 53 #define NPFS_CCB_TAG 'cFpN' 54 #define NPFS_ROOT_DCB_CCB_TAG 'CFpN' 55 #define NPFS_DCB_TAG 'DFpN' 56 #define NPFS_FCB_TAG 'fFpN' 57 #define NPFS_GLOBAL_TAG 'gFpN' 58 #define NPFS_CLIENT_INFO_TAG 'iFpN' 59 #define NPFS_NAME_BLOCK_TAG 'nFpN' 60 #define NPFS_QUERY_TEMPLATE_TAG 'qFpN' 61 #define NPFS_DATA_ENTRY_TAG 'rFpN' 62 #define NPFS_CLIENT_SEC_CTX_TAG 'sFpN' 63 #define NPFS_WAIT_BLOCK_TAG 'tFpN' 64 #define NPFS_WRITE_BLOCK_TAG 'wFpN' 85 #define NPFS_BUGCHECK_CLEANUP 0x0001 86 #define NPFS_BUGCHECK_CLOSE 0x0002 87 #define NPFS_BUGCHECK_CREATE 0x0003 88 #define NPFS_BUGCHECK_DATASUP 0x0004 89 #define NPFS_BUGCHECK_FILEINFO 0x0005 90 #define NPFS_BUGCHECK_FILEOBSUP 0x0006 91 #define NPFS_BUGCHECK_FLUSHBUF 0x0007 92 #define NPFS_BUGCHECK_FSCTRL 0x0008 93 #define NPFS_BUGCHECK_MAIN 0x0009 94 #define NPFS_BUGCHECK_PREFXSUP 0x000a 95 #define NPFS_BUGCHECK_READ 0x000b 96 #define NPFS_BUGCHECK_READSUP 0x000c 97 #define NPFS_BUGCHECK_SECURSUP 0x000d 98 #define NPFS_BUGCHECK_SEINFO 0x000e 99 #define NPFS_BUGCHECK_STATESUP 0x000f 100 #define NPFS_BUGCHECK_STRUCSUP 0x0010 101 #define NPFS_BUGCHECK_VOLINFO 0x0011 102 #define NPFS_BUGCHECK_WAITSUP 0x0012 103 #define NPFS_BUGCHECK_WRITE 0x0013 104 #define NPFS_BUGCHECK_WRITESUP 0x0014 106 #define NpBugCheck(p1, p2, p3) \ 107 KeBugCheckEx(NPFS_FILE_SYSTEM, \ 108 (NPFS_BUGCHECK_FILE_ID << 16) | __LINE__, \ 112 #define NPFS_NTC_VCB 1 113 #define NPFS_NTC_ROOT_DCB 2 114 #define NPFS_NTC_FCB 4 115 #define NPFS_NTC_CCB 6 116 #define NPFS_NTC_NONPAGED_CCB 7 117 #define NPFS_NTC_ROOT_DCB_CCB 8 362 ThisEntry = DeferredList->
Flink;
363 while (ThisEntry != DeferredList)
366 NextEntry = ThisEntry->
Flink;
373 ThisEntry = NextEntry;
VOID NTAPI NpDeleteFcb(IN PNP_FCB Fcb, IN PLIST_ENTRY ListEntry)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
NTSTATUS NTAPI NpWriteDataQueue(IN PNP_DATA_QUEUE WriteQueue, IN ULONG Mode, IN PVOID OutBuffer, IN ULONG OutBufferSize, IN ULONG PipeType, OUT PULONG BytesWritten, IN PNP_CCB Ccb, IN ULONG NamedPipeEnd, IN PETHREAD Thread, IN PLIST_ENTRY List)
NTSTATUS NTAPI NpFsdFlushBuffers(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _NP_DATA_QUEUE_ENTRY NP_DATA_QUEUE_ENTRY
NODE_TYPE_CODE NTAPI NpDecodeFileObject(IN PFILE_OBJECT FileObject, OUT PVOID *PrimaryContext OPTIONAL, OUT PNP_CCB *Ccb, OUT PULONG NamedPipeEnd OPTIONAL)
struct _NP_DATA_QUEUE_ENTRY * PNP_DATA_QUEUE_ENTRY
_In_ __drv_aliasesMem PSTRING Prefix
_NP_DATA_QUEUE_ENTRY_TYPE
FORCEINLINE VOID NpAcquireSharedVcb(VOID)
NTSTATUS NTAPI NpGetClientSecurityContext(IN ULONG NamedPipeEnd, IN PNP_CCB Ccb, IN PETHREAD Thread, IN PSECURITY_CLIENT_CONTEXT *Context)
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
PNP_EVENT_BUFFER EventBuffer[2]
static VOID Peek(IN PUCHAR ReadDataPort, IN OUT PVOID Buffer, IN ULONG Length)
struct _NP_CB_FOOTER NP_CB_FOOTER
struct _NP_NONPAGED_CCB * PNP_NONPAGED_CCB
PNP_NONPAGED_CCB NonPagedCcb
PNPFS_ALIAS NpAliasListByLength[MAX_INDEXED_LENGTH+1 - MIN_INDEXED_LENGTH]
_In_ WDFDPC _In_ BOOLEAN Wait
NTSTATUS NTAPI NpFsdQueryInformation(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define MAX_INDEXED_LENGTH
_In_ __drv_aliasesMem PSTRING _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry
NTSTATUS NTAPI NpCreateRootDcbCcb(IN PNP_ROOT_DCB_FCB *NewRootCcb)
NTSTATUS NTAPI NpFsdCreateNamedPipe(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI NpUninitializeDataQueue(IN PNP_DATA_QUEUE DataQueue)
NTSTATUS NTAPI NpFsdQueryVolumeInformation(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI NpSetConnectedPipeState(IN PNP_CCB Ccb, IN PFILE_OBJECT FileObject, IN PLIST_ENTRY List)
PNP_FCB NTAPI NpFindPrefix(IN PUNICODE_STRING Name, IN ULONG CaseInsensitiveIndex, IN PUNICODE_STRING Prefix)
char * Pad(char *Str, char PadChar, ULONG Length)
VOID NTAPI NpSetFileObject(IN PFILE_OBJECT FileObject, IN PVOID PrimaryContext, IN PVOID Ccb, IN ULONG NamedPipeEnd)
NTSTATUS NTAPI NpFsdCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _NP_WAIT_QUEUE_ENTRY * PNP_WAIT_QUEUE_ENTRY
struct _NPFS_ALIAS * PNPFS_ALIAS
struct _NPFS_ALIAS NPFS_ALIAS
struct _NP_EVENT_BUFFER * PNP_EVENT_BUFFER
struct _NP_NONPAGED_CCB NP_NONPAGED_CCB
VOID NTAPI NpCopyClientContext(IN PNP_CCB Ccb, IN PNP_DATA_QUEUE_ENTRY DataQueueEntry)
struct _NP_DATA_QUEUE * PNP_DATA_QUEUE
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
_In_ PDEVICE_OBJECT DeviceObject
struct _NP_CLIENT_PROCESS * PNP_CLIENT_PROCESS
struct _NP_WAIT_QUEUE NP_WAIT_QUEUE
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
LONG NTAPI NpCompareAliasNames(_In_ PCUNICODE_STRING String1, _In_ PCUNICODE_STRING String2)
VOID NTAPI NpFreeClientSecurityContext(IN PSECURITY_CLIENT_CONTEXT ClientContext)
NTSTATUS NTAPI NpFindRelativePrefix(IN PNP_DCB Dcb, IN PUNICODE_STRING Name, IN ULONG CaseInsensitiveIndex, IN PUNICODE_STRING Prefix, OUT PNP_FCB *FoundFcb)
#define IoCompleteRequest
#define _IRQL_requires_same_
USHORT NamedPipeConfiguration
enum _NP_DATA_QUEUE_STATE NP_DATA_QUEUE_STATE
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
enum _NP_DATA_QUEUE_ENTRY_TYPE NP_DATA_QUEUE_ENTRY_TYPE
BOOLEAN NTAPI NpDeleteEventTableEntry(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer)
struct _LIST_ENTRY * Flink
VOID NTAPI NpInitializeWaitQueue(IN PNP_WAIT_QUEUE WaitQueue)
struct _NP_WAIT_QUEUE_ENTRY NP_WAIT_QUEUE_ENTRY
struct _NP_CB_HEADER * PNP_CB_HEADER
struct _NP_ROOT_DCB_CCB * PNP_ROOT_DCB_FCB
struct _NP_CB_HEADER NP_CB_HEADER
IO_STATUS_BLOCK NTAPI NpReadDataQueue(IN PNP_DATA_QUEUE DataQueue, IN BOOLEAN Peek, IN BOOLEAN ReadOverflowOperation, IN PVOID Buffer, IN ULONG BufferSize, IN ULONG Mode, IN PNP_CCB Ccb, IN PLIST_ENTRY List)
NTSTATUS NTAPI NpAddWaiter(IN PNP_WAIT_QUEUE WaitQueue, IN LARGE_INTEGER WaitTime, IN PIRP Irp, IN PUNICODE_STRING AliasName)
struct _NP_EVENT_BUFFER NP_EVENT_BUFFER
NTSTATUS NTAPI NpFsdQuerySecurityInfo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
NTSTATUS NTAPI NpImpersonateClientContext(IN PNP_CCB Ccb)
SECURITY_QUALITY_OF_SERVICE ClientQos
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define IO_NAMED_PIPE_INCREMENT
NTSTATUS NTAPI NpSetListeningPipeState(IN PNP_CCB Ccb, IN PIRP Irp, IN PLIST_ENTRY List)
struct _NPFS_ALIAS * Next
NTSTATUS NTAPI NpCreateFcb(IN PNP_DCB Dcb, IN PUNICODE_STRING PipeName, IN ULONG MaximumInstances, IN LARGE_INTEGER Timeout, IN USHORT NamedPipeConfiguration, IN USHORT NamedPipeType, OUT PNP_FCB *NewFcb)
VOID NTAPI NpCheckForNotify(IN PNP_DCB Dcb, IN BOOLEAN SecondList, IN PLIST_ENTRY List)
NTSTATUS NTAPI NpInitializeDataQueue(IN PNP_DATA_QUEUE DataQueue, IN ULONG Quota)
NTSTATUS NTAPI NpCreateRootDcb(VOID)
PLIST_ENTRY NTAPI NpGetNextRealDataQueueEntry(IN PNP_DATA_QUEUE DataQueue, IN PLIST_ENTRY List)
RTL_GENERIC_TABLE EventTable
_Must_inspect_result_ _In_ WDFCMRESLIST List
NTSTATUS NTAPI NpFsdSetInformation(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI NpFsdWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PUNICODE_STRING CurrentTargetName
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
VOID NTAPI NpInitializeVcb(VOID)
VOID NTAPI NpCompleteStalledWrites(IN PNP_DATA_QUEUE DataQueue, IN PLIST_ENTRY List)
VOID NTAPI NpUninitializeSecurity(IN PNP_CCB Ccb)
_In_ PLARGE_INTEGER _In_ ULONG _In_ BOOLEAN _In_ ULONG LockKey
NTSTATUS NTAPI NpInitializeSecurity(IN PNP_CCB Ccb, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, IN PETHREAD Thread)
NTSTATUS NTAPI NpCreateCcb(IN PNP_FCB Fcb, IN PFILE_OBJECT FileObject, IN UCHAR State, IN UCHAR ReadMode, IN UCHAR CompletionMode, IN ULONG InQuota, IN ULONG OutQuota, OUT PNP_CCB *NewCcb)
struct _NP_DATA_QUEUE NP_DATA_QUEUE
struct _NPFS_QUERY_VALUE_CONTEXT * PNPFS_QUERY_VALUE_CONTEXT
NTSTATUS NTAPI NpFsdSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
UNICODE_PREFIX_TABLE PrefixTable
PSECURITY_CLIENT_CONTEXT ClientSecurityContext
C_ASSERT(FIELD_OFFSET(NP_FCB, PrefixTableEntry)==FIELD_OFFSET(NP_DCB, PrefixTableEntry))
NTSTATUS NTAPI NpSetDisconnectedPipeState(IN PNP_CCB Ccb, IN PLIST_ENTRY List)
VOID NTAPI NpDeleteCcb(IN PNP_CCB Ccb, IN PLIST_ENTRY ListEntry)
FORCEINLINE VOID NpReleaseVcb(VOID)
#define MIN_INDEXED_LENGTH
#define FIELD_OFFSET(t, f)
NTSTATUS NTAPI NpFsdRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PUNICODE_STRING TargetName
struct _NP_WAIT_QUEUE * PNP_WAIT_QUEUE
struct _NP_CLIENT_PROCESS NP_CLIENT_PROCESS
NTSTATUS NTAPI NpSetClosingPipeState(IN PNP_CCB Ccb, IN PIRP Irp, IN ULONG NamedPipeEnd, IN PLIST_ENTRY List)
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
PSECURITY_CLIENT_CONTEXT ClientContext
_In_ const STRING * String2
struct _NPFS_QUERY_VALUE_CONTEXT NPFS_QUERY_VALUE_CONTEXT
_Function_class_(FAST_IO_READ) _IRQL_requires_same_ BOOLEAN NTAPI NpFastRead(_In_ PFILE_OBJECT FileObject
NP_DATA_QUEUE DataQueue[2]
NTSTATUS NTAPI NpAddDataQueueEntry(IN ULONG NamedPipeEnd, IN PNP_CCB Ccb, IN PNP_DATA_QUEUE DataQueue, IN ULONG Who, IN ULONG Type, IN ULONG DataSize, IN PIRP Irp, IN PVOID Buffer, IN ULONG ByteOffset)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
NTSTATUS NTAPI NpCancelWaiter(IN PNP_WAIT_QUEUE WaitQueue, IN PUNICODE_STRING PipeName, IN NTSTATUS Status, IN PLIST_ENTRY ListEntry)
NTSTATUS NTAPI NpFsdCleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
FORCEINLINE VOID NpAcquireExclusiveVcb(VOID)
NTSTATUS NTAPI NpFsdClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _NP_ROOT_DCB_CCB NP_ROOT_DCB_CCB
_In_ PUNICODE_STRING _In_ ULONG CaseInsensitiveIndex
_In_ PLARGE_INTEGER FileOffset
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB * Dcb
FORCEINLINE VOID NpCompleteDeferredIrps(IN PLIST_ENTRY DeferredList)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
NTSTATUS NTAPI NpFsdFileSystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PIRP NTAPI NpRemoveDataQueueEntry(IN PNP_DATA_QUEUE DataQueue, IN BOOLEAN Flag, IN PLIST_ENTRY List)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
PULONG MinorVersion OPTIONAL
PWCHAR CurrentStringPointer