Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

191 lines
5.3 KiB

typedef struct _NT5CSC_MINIFILEOBJECT {
NODE_TYPE_CODE_AND_SIZE_NO_REFCOUNT;
ULONG Flags;
HANDLE NtHandle;
PFILE_OBJECT UnderlyingFileObject;
union {
struct {
//cant do this PDEVICE_OBJECT UnderlyingDeviceObject;
FAST_MUTEX MutexForSynchronousIo; //only synchronous Io is allowed
union {
FILE_STANDARD_INFORMATION StandardInfo;
FILE_BASIC_INFORMATION BasicInfo;
FILE_FS_SIZE_INFORMATION FsSizeInfo;
FILE_FS_FULL_SIZE_INFORMATION FsFullSizeInfo;
};
ULONG ReturnedLength;
};
struct {
KEVENT PostEvent;
union {
RX_WORK_QUEUE_ITEM WorkQueueItem;
NTSTATUS PostReturnStatus;
};
//this must match the signatureof Nt5CscCreateFile
LPSTR lpPath;
BOOL fInstrument;
ULONG FileAttributes;
ULONG CreateOptions;
ULONG Disposition;
ULONG ShareAccess;
ACCESS_MASK DesiredAccess;
PVOID Continuation; //PNT5CSC_CREATEFILE_CONTINUATION Continuation;
PVOID ContinuationContext;
} PostXX;
};
} NT5CSC_MINIFILEOBJECT, *PNT5CSC_MINIFILEOBJECT;
#define NT5CSC_MINIFOBJ_FLAG_ALLOCATED_FROM_POOL 0x00000001
#define NT5CSC_MINIFOBJ_FLAG_LOUDDOWNCALLS 0x00000080
#define NT5CSC_NTC_MINIFILEOBJECT ((USHORT)0xed34)
#define ASSERT_MINIRDRFILEOBJECT(___m) ASSERT(NodeType(___m)==NT5CSC_NTC_MINIFILEOBJECT)
//LOUD DOWNCALLS
#ifdef RX_PRIVATE_BUILD
//#define MRXSMBCSC_LOUDDOWNCALLS
#else
#undef MRXSMBCSC_LOUDDOWNCALLS
#endif
#ifdef MRXSMBCSC_LOUDDOWNCALLS
VOID
LoudCallsDbgPrint(
PSZ Tag,
PNT5CSC_MINIFILEOBJECT MiniFileObject,
ULONG MajorFunction,
ULONG lCount,
ULONG LowPart,
ULONG HighPart,
ULONG Status,
ULONG Information
);
#define IF_LOUD_DOWNCALLS(__minifileobj) \
if(FlagOn((__minifileobj)->Flags,NT5CSC_MINIFOBJ_FLAG_LOUDDOWNCALLS))
#define LOUD_DOWNCALLS_DECL(__x) __x
#define LOUD_DOWNCALLS_CODE(__x) __x
#define IF_BUILT_FOR_LOUD_DOWNCALLS() if(TRUE)
#else
#define LoudCallsDbgPrint(a1,a2,a3,a4,a5,a6,a7,a8) {NOTHING;}
#define IF_LOUD_DOWNCALLS(__minifileobj) if(FALSE)
#define LOUD_DOWNCALLS_DECL(__x)
#define LOUD_DOWNCALLS_CODE(__x)
#define IF_BUILT_FOR_LOUD_DOWNCALLS() if(FALSE)
#endif //#ifdef MRXSMBCSC_LOUDDOWNCALLS
//long R0ReadWriteFileEx
// (
// ULONG uOper,
// ULONG handle,
// ULONG pos,
// PVOID pBuff,
// long lCount,
// BOOL fInstrument
// )
#define NT5CSC_RW_FLAG_INSTRUMENTED 0x00000001
#define NT5CSC_RW_FLAG_IRP_NOCACHE 0x00000002
#define NT5CSC_RW_FLAG_PAGED_BUFFER 0x00000004
LONG
Nt5CscReadWriteFileEx (
ULONG uOper,
CSCHFILE handle,
ULONGLONG pos,
PVOID pBuff,
long lCount,
ULONG Flags,
PIO_STATUS_BLOCK OutIoStatusBlock OPTIONAL
);
#define R0ReadWriteFileEx(__oper,__handle,__pos,__pbuff,__lcount,__instrument) \
(Nt5CscReadWriteFileEx(__oper, \
__handle, \
__pos, \
__pbuff, \
__lcount, \
(__instrument)?NT5CSC_RW_FLAG_INSTRUMENTED:0, \
NULL \
))
#define R0ReadWriteFileEx2(__oper,__handle,__pos,__pbuff,__lcount,__flags) \
(Nt5CscReadWriteFileEx(__oper, \
__handle, \
__pos, \
__pbuff, \
__lcount, \
((__flags & FLAG_RW_OSLAYER_INSTRUMENT)?NT5CSC_RW_FLAG_INSTRUMENTED:0) \
| ((__flags & FLAG_RW_OSLAYER_PAGED_BUFFER)?NT5CSC_RW_FLAG_PAGED_BUFFER:0), \
NULL \
))
extern IO_STATUS_BLOCK Nt5CscGlobalIoStatusBlock; //used by Nt5CscReadWriteFileEx
NTSTATUS
Nt5CscXxxInformation(
IN PCHAR xMajorFunction,
IN PNT5CSC_MINIFILEOBJECT MiniFileObject,
IN ULONG InformationClass,
IN ULONG Length,
OUT PVOID Information,
OUT PULONG ReturnedLength
);
BOOL
CscAmIAdmin(
VOID
);
typedef
NTSTATUS
(*PNT5CSC_CREATEFILE_CONTINUATION) (
IN OUT PNT5CSC_MINIFILEOBJECT MiniFileObject,
IN OUT PVOID ContinuationContext,
IN NTSTATUS CreateStatus
);
PNT5CSC_MINIFILEOBJECT
__Nt5CscCreateFile (
IN OUT PNT5CSC_MINIFILEOBJECT MiniFileObject OPTIONAL,
IN LPSTR lpPath,
IN ULONG CSCFlags,
IN ULONG FileAttributes,
IN ULONG CreateOptions,
IN ULONG Disposition,
IN ULONG ShareAccess,
IN ACCESS_MASK DesiredAccess,
IN PNT5CSC_CREATEFILE_CONTINUATION Continuation,
IN OUT PVOID ContinuationContext,
IN BOOL PostedCall
);
int
DeleteStream(
LPTSTR lpdbID,
ULONG ulidFile,
LPTSTR str2Append
);
BOOL
GetFileSystemAttributes(
CSCHFILE handle,
ULONG *lpFileSystemAttributes
);
BOOL
HasStreamSupport(
CSCHFILE handle,
BOOL *lpfResult
);