urbackup_backend/btrfs/fuse/nt/windef.h
2021-07-15 17:01:25 +02:00

2734 lines
84 KiB
C

#pragma once
#ifdef _WIN32
#include <stdint.h>
#include <stddef.h>
#include <sys/stat.h>
#endif
#include <guiddef.h>
#include <ntstatus.h>
#include <string.h>
#include <stdarg.h>
#ifndef _WIN32
#include <wchar.h>
#endif
#if !defined(_WCHAR_T_DEFINED) && defined(_WIN32)
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif
#if !defined(_WIN32) && !defined(__stdcall)
#define __stdcall
#define _stdcall
#endif
#ifndef _WIN32
#define _MSC_VER 1
#define _Requires_lock_held_(a)
#define _Requires_exclusive_lock_held_(a)
#define _Releases_lock_(a)
#define _Out_writes_bytes_opt_(a)
#define _Pre_satisfies_(a)
#define _Post_satisfies_(a)
#define _Releases_exclusive_lock_(a)
#define _Create_lock_level_(a)
#define _Lock_level_order_(a,b)
#define _Has_lock_level_(a)
#define _Requires_lock_not_held_(a)
#define _Acquires_exclusive_lock_(a)
#define _Acquires_shared_lock_(a)
#define _In_opt_
#define _In_
#define _Out_
#define _Ret_maybenull_
#define _In_reads_bytes_opt_(x)
#define _When_(x, y)
#define _Success_(x)
#define _Inout_
#define _Out_writes_bytes_(x)
#define _In_reads_bytes_(x)
#define _In_z_
#define _Out_opt_
#ifndef __cplusplus
#define __try if (1)
#define __except(x) if (0 && (x))
#define __finally if (1)
#endif
#ifndef S_IFDIR
# define S_IFDIR 0040000
#endif
#ifndef S_IFREG
# define S_IFREG 0100000
#endif
#ifndef S_IFLNK
# define S_IFLNK 0120000
#endif
#define _stricmp strcasecmp
#define MAX_PATH 255
#endif
typedef unsigned char BOOL;
typedef BOOL BOOLEAN;
typedef void* HANDLE;
typedef HANDLE* PHANDLE;
typedef wchar_t WCHAR;
typedef unsigned long ULONG;
typedef ULONG* PULONG;
typedef long LONG;
typedef unsigned short USHORT;
typedef unsigned int UINT;
typedef LONG NTSTATUS;
typedef unsigned long DWORD;
typedef unsigned short WORD;
#ifdef _WIN32
typedef unsigned __int64 ULONGLONG;
typedef __int64 LONGLONG;
#else
typedef unsigned long long int ULONGLONG;
typedef long long int LONGLONG;
#endif
typedef short CSHORT;
typedef ULONG ACCESS_MASK;
typedef unsigned char UCHAR;
typedef void* PVOID;
typedef unsigned char* PUCHAR;
typedef ULONGLONG ULONG_PTR;
typedef char KPROCESSOR_MODE;
typedef ULONGLONG ULONG64;
typedef void VOID;
typedef unsigned long ULONG32;
typedef unsigned char BYTE;
typedef unsigned int KAFFINITY;
typedef char* PCHAR;
typedef size_t SIZE_T;
#ifdef _WIN32
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#define POINTER_64
#define POINTER_32
typedef unsigned long long int POINTER_64_INT;
#endif
typedef union
{
struct {
DWORD LowPart;
LONG HighPart;
};
struct {
DWORD LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;
} LARGE_INTEGER;
typedef LARGE_INTEGER* PLARGE_INTEGER;
typedef struct _FAST_MUTEX_OP FAST_MUTEX_OP;
typedef struct _FAST_MUTEX
{
FAST_MUTEX_OP* fast_mutex;
} FAST_MUTEX;
typedef FAST_MUTEX* PFAST_MUTEX;
typedef struct _SECTION_OBJECT_POINTERS {
void* DataSectionObject;
void* SharedCacheMap;
void* ImageSectionObject;
} SECTION_OBJECT_POINTERS;
typedef SECTION_OBJECT_POINTERS* PSECTION_OBJECT_POINTERS;
typedef struct _LIST_ENTRY {
struct _LIST_ENTRY* Flink;
struct _LIST_ENTRY* Blink;
} LIST_ENTRY;
typedef LIST_ENTRY* PLIST_ENTRY;
typedef struct _UNICODE_STRING {
ULONG Length;
ULONG MaximumLength;
WCHAR* Buffer;
} UNICODE_STRING;
typedef UNICODE_STRING* PUNICODE_STRING;
typedef PUNICODE_STRING PSTRING;
typedef struct _STRING {
ULONG Length;
ULONG MaximumLength;
char* Buffer;
} STRING;
typedef struct _ANSI_STRING {
ULONG Length;
ULONG MaximumLength;
char* Buffer;
} ANSI_STRING;
typedef ANSI_STRING* PANSI_STRING;
typedef void* OPLOCK;
typedef OPLOCK* POPLOCK;
BOOL FsRtlOplockIsFastIoPossible(POPLOCK lock);
typedef enum _FAST_IO_POSSIBLE {
FastIoIsNotPossible = 0,
FastIoIsPossible,
FastIoIsQuestionable
} FAST_IO_POSSIBLE;
struct _ERESOURCE;
typedef struct _ERESOURCE* PERESOURCE;
typedef struct _FSRTL_ADVANCED_FCB_HEADER {
UCHAR Version;
OPLOCK Oplock;
ULONG Flags;
UCHAR Flags2;
FAST_IO_POSSIBLE IsFastIoPossible;
PERESOURCE PagingIoResource;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
PERESOURCE Resource;
ULONG NodeTypeCode;
ULONG NodeByteSize;
} FSRTL_ADVANCED_FCB_HEADER;
typedef FSRTL_ADVANCED_FCB_HEADER* PFSRTL_ADVANCED_FCB_HEADER;
typedef enum _POOL_TYPE {
NonPagedPool,
PagedPool
} POOL_TYPE;
typedef struct _SECURITY_DESCRIPTOR {
int dummy;
} SECURITY_DESCRIPTOR;
typedef SECURITY_DESCRIPTOR* PSECURITY_DESCRIPTOR;
typedef struct _FILE_LOCK {
int dummy;
} FILE_LOCK;
typedef FILE_LOCK* PFILE_LOCK;
typedef struct _KTHREAD {
void* ptr;
} KTHREAD;
typedef KTHREAD* PKTHREAD;
typedef struct _PKTHREAD* PETHREAD;
typedef struct _SHARE_ACCESS {
int dummy;
} SHARE_ACCESS;
typedef SHARE_ACCESS* PSHARE_ACCESS;
typedef struct _KEVENT {
LONG eword;
} KEVENT;
typedef KEVENT* PKEVENT;
typedef enum _EVENT_TYPE {
NotificationEvent,
SynchronizationEvent
} EVENT_TYPE;
typedef struct _KPROCESS {
int dummy;
} _KPROCESS;
typedef _KPROCESS* PEPROCESS;
PEPROCESS PsGetCurrentProcess();
struct _VPB;
typedef struct _VPB* PVPB;
struct _DRIVER_OBJECT;
typedef struct _DRIVER_OBJECT* PDRIVER_OBJECT;
struct _DEVICE_OBJECT;
typedef struct _DEVICE_OBJECT* PDEVICE_OBJECT;
struct _DISK_DEVICE;
typedef struct _DISK_DEVICE* PDISK_DEVICE;
typedef struct _DEVICE_OBJECT {
char StackSize;
unsigned int Flags;
PVOID DeviceExtension;
PVPB Vpb;
unsigned int Characteristics;
PDEVICE_OBJECT AttachedDevice;
ULONG SectorSize;
PDRIVER_OBJECT DriverObject;
PDISK_DEVICE DiskDevice;
PVOID DeviceObjectExtension;
} DEVICE_OBJECT;
typedef DEVICE_OBJECT* PDEVICE_OBJECT;
typedef struct _VPB {
short Type;
short Size;
unsigned short Flags;
unsigned short VolumeLabelLength;
PDEVICE_OBJECT DeviceObject;
PDEVICE_OBJECT RealDevice;
ULONG ReferenceCount;
WCHAR VolumeLabel[10];
} VPB;
typedef VPB* PVPB;
typedef struct _RTL_BITMAP {
ULONG SizeOfBitMap;
ULONG* Buffer;
} RTL_BITMAP;
typedef RTL_BITMAP* PRTL_BITMAP;
struct KSPIN_LOCK_IMPL;
typedef struct KSPIN_LOCK_IMPL* PKSPIN_LOCK_IMPL;
typedef struct _KSPIN_LOCK {
PKSPIN_LOCK_IMPL Lock;
} KSPIN_LOCK;
typedef KSPIN_LOCK* PKSPIN_LOCK;
struct _FILE_OBJECT;
typedef struct _FILE_OBJECT* PFILE_OBJECT;
typedef struct _FILE_OBJECT {
PVOID FsContext;
PVOID FsContext2;
PSECTION_OBJECT_POINTERS SectionObjectPointer;
ULONG Flags;
PDEVICE_OBJECT DeviceObject;
PVPB Vpb;
PFILE_OBJECT RelatedFileObject;
UNICODE_STRING FileName;
BOOLEAN DeletePending;
LARGE_INTEGER CurrentByteOffset;
BOOLEAN PrivateCacheMap;
} FILE_OBJECT;
typedef FILE_OBJECT* PFILE_OBJECT;
#define FO_CLEANUP_COMPLETE (1<<0)
#define FO_CACHE_SUPPORTED (1<<1)
#define FO_SYNCHRONOUS_IO (1<<2)
typedef struct _NOTIFY_SYNC {
int dummy;
} NOTIFY_SYNC;
typedef NOTIFY_SYNC* PNOTIFY_SYNC;
typedef struct _KTIMER {
LONG Set;
ULONG Slot;
LONGLONG Timer;
} KTIMER;
typedef KTIMER* PKTIMER;
typedef struct _PAGED_LOOKASIDE_LIST {
SIZE_T entry_size;
} PAGED_LOOKASIDE_LIST;
typedef PAGED_LOOKASIDE_LIST* PPAGED_LOOKASIDE_LIST;
typedef struct _NPAGED_LOOKASIDE_LIST {
SIZE_T entry_size;
} NPAGED_LOOKASIDE_LIST;
typedef NPAGED_LOOKASIDE_LIST* PNPAGED_LOOKASIDE_LIST;
typedef struct _SID {
int dummy;
} SID;
typedef SID* PSID;
typedef struct _MDL {
void* ptr;
ULONG ByteOffset;
ULONG MdlFlags;
ULONG Length;
} MDL;
typedef MDL* PMDL;
typedef enum _REQMODE {
KernelMode = 0,
UserMode,
MaximumMode
} REQMODE;
typedef struct _IO_STATUS_BLOCK {
NTSTATUS Status;
ULONG_PTR Information;
} IO_STATUS_BLOCK;
typedef IO_STATUS_BLOCK* PIO_STATUS_BLOCK;
typedef enum _IRP_MAJ_FUNCTION {
IRP_MJ_CREATE=0,
IRP_MJ_CLOSE,
IRP_MJ_WRITE,
IRP_MJ_READ,
IRP_MJ_QUERY_INFORMATION,
IRP_MJ_SET_INFORMATION,
IRP_MJ_QUERY_EA,
IRP_MJ_SET_EA,
IRP_MJ_FLUSH_BUFFERS,
IRP_MJ_QUERY_VOLUME_INFORMATION,
IRP_MJ_SET_VOLUME_INFORMATION,
IRP_MJ_DIRECTORY_CONTROL,
IRP_MJ_FILE_SYSTEM_CONTROL,
IRP_MJ_DEVICE_CONTROL,
IRP_MJ_SHUTDOWN,
IRP_MJ_LOCK_CONTROL,
IRP_MJ_CLEANUP,
IRP_MJ_QUERY_SECURITY,
IRP_MJ_SET_SECURITY,
IRP_MJ_POWER,
IRP_MJ_SYSTEM_CONTROL,
IRP_MJ_PNP,
IRP_MJ_INTERNAL_DEVICE_CONTROL
} IRP_MAJ_FUNCTION;
typedef enum _IRP_MIN_FUNCTION {
IRP_MN_MOUNT_VOLUME,
IRP_MN_KERNEL_CALL,
IRP_MN_USER_FS_REQUEST,
IRP_MN_VERIFY_VOLUME,
IRP_MN_QUERY_POWER,
IRP_MN_SET_POWER,
IRP_MN_NOTIFY_CHANGE_DIRECTORY,
IRP_MN_QUERY_DIRECTORY,
IRP_MN_CANCEL_REMOVE_DEVICE,
IRP_MN_QUERY_REMOVE_DEVICE,
IRP_MN_REMOVE_DEVICE,
IRP_MN_SURPRISE_REMOVAL,
IRP_MN_DEVICE_USAGE_NOTIFICATION,
IRP_MN_QUERY_CAPABILITIES,
IRP_MN_QUERY_DEVICE_RELATIONS,
IRP_MN_QUERY_ID,
IRP_MN_START_DEVICE,
IRP_MN_NORMAL,
IRP_MN_MDL,
IRP_MN_COMPLETE
} IRP_MIN_FUNCTION;
typedef enum _FS_INFORMATION {
FileFsAttributeInformation,
FileFsDeviceInformation,
FileFsFullSizeInformation,
FileFsObjectIdInformation,
FileFsSizeInformation,
FileFsVolumeInformation,
FileFsSectorSizeInformation,
FileFsControlInformation,
FileFsLabelInformation
} FS_INFORMATION;
typedef enum _POWER_TYPE {
SystemPowerState
} POWER_TYPE;
typedef enum _SYSTEM_STATE {
PowerSystemNone,
PowerSystemWorking
} SYSTEM_STATE;
typedef struct _ACCESS_TOKEN {
int dummy;
} ACCESS_TOKEN;
typedef ACCESS_TOKEN* PACCESS_TOKEN;
typedef struct _SECURITY_SUBJECT_CONTEXT {
PACCESS_TOKEN PrimaryToken;
} SECURITY_SUBJECT_CONTEXT;
typedef SECURITY_SUBJECT_CONTEXT* PSECURITY_SUBJECT_CONTEXT;
typedef struct _ACCESS_STATE {
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
ULONG PreviouslyGrantedAccess;
ULONG RemainingDesiredAccess;
PSECURITY_DESCRIPTOR SecurityDescriptor;
} ACCESS_STATE;
typedef ACCESS_STATE* PACCESS_STATE;
typedef struct _SECURITY_CONTEXT {
PACCESS_STATE AccessState;
ACCESS_MASK DesiredAccess;
} SECURITY_CONTEXT;
typedef SECURITY_CONTEXT* PSECURITY_CONTEXT;
typedef enum _FILE_INFORMATION_CLASS {
FileNamesInformation,
FileBothDirectoryInformation,
FileFullDirectoryInformation,
FileDirectoryInformation,
FileIdFullDirectoryInformation,
FileIdExtdDirectoryInformation,
FileIdExtdBothDirectoryInformation,
FileIdBothDirectoryInformation,
FileObjectIdInformation,
FileQuotaInformation,
FileReparsePointInformation,
FileAttributeTagInformation,
FileBasicInformation,
FileCompressionInformation,
FileEaInformation,
FileInternalInformation,
FileNameInformation,
FileNetworkOpenInformation,
FileStandardInformation,
FilePositionInformation,
FileStreamInformation,
FileHardLinkInformation,
FileNormalizedNameInformation,
FileStandardLinkInformation,
FileRemoteProtocolInformation,
FileIdInformation,
FileStatInformation,
FileStatLxInformation,
FileCaseSensitiveInformation,
FileHardLinkFullIdInformation,
FileAllocationInformation,
FileDispositionInformation,
FileEndOfFileInformation,
FileLinkInformation,
FileRenameInformation,
FileValidDataLengthInformation,
FileDispositionInformationEx,
FileRenameInformationEx,
FileLinkInformationEx,
FileStorageReserveIdInformation,
FileAllInformation
} FILE_INFORMATION_CLASS;
typedef struct _FILE_GET_EA_INFORMATION {
ULONG NextEntryOffset;
ULONG EaNameLength;
char EaName[1];
} FILE_GET_EA_INFORMATION;
typedef FILE_GET_EA_INFORMATION* PFILE_GET_EA_INFORMATION;
struct _FILE_ALLOCATED_RANGE_BUFFER;
typedef struct _FILE_ALLOCATED_RANGE_BUFFER* PFILE_ALLOCATED_RANGE_BUFFER;
typedef struct _PDEVICE_CAPABILITIES {
BOOLEAN UniqueID;
BOOLEAN SilentInstall;
} DEVICE_CAPABILITIES;
typedef DEVICE_CAPABILITIES* PDEVICE_CAPABILITIES;
typedef enum _QUERY_ID_TYPE {
BusQueryHardwareIDs,
BusQueryDeviceID
} QUERY_ID_TYPE;
typedef enum _DEVICE_RELATIONS_TYPE {
BusRelations,
TargetDeviceRelation
} DEVICE_RELATIONS_TYPE;
typedef enum _USAGE_NOTIFICATION_TYPE {
DeviceUsageTypePaging,
DeviceUsageTypeHibernation,
DeviceUsageTypeDumpFile
} USAGE_NOTIFICATION_TYPE;
typedef ULONG SECURITY_INFORMATION;
typedef SECURITY_INFORMATION* PSECURITY_INFORMATION;
typedef struct _IO_STACK_LOCATION {
IRP_MAJ_FUNCTION MajorFunction;
IRP_MIN_FUNCTION MinorFunction;
PFILE_OBJECT FileObject;
ULONG Flags;
union _Parameters
{
struct
{
ULONG Length;
LARGE_INTEGER ByteOffset;
} Write;
struct
{
ULONG Length;
LARGE_INTEGER ByteOffset;
} Read;
struct
{
ULONG Length;
FS_INFORMATION FsInformationClass;
} QueryVolume;
struct {
FS_INFORMATION FsInformationClass;
} SetVolume;
struct {
PDEVICE_OBJECT DeviceObject;
PVPB Vpb;
} MountVolume;
struct {
ULONG FsControlCode;
ULONG InputBufferLength;
ULONG OutputBufferLength;
PFILE_ALLOCATED_RANGE_BUFFER Type3InputBuffer;
} FileSystemControl;
struct {
POWER_TYPE Type;
struct {
SYSTEM_STATE SystemState;
} State;
} Power;
struct {
ULONG FileAttributes;
PSECURITY_CONTEXT SecurityContext;
ULONG ShareAccess;
ULONG EaLength;
ULONG Options;
} Create;
struct {
FILE_INFORMATION_CLASS FileInformationClass;
PUNICODE_STRING FileName;
ULONG Length;
} QueryDirectory;
struct {
ULONG CompletionFilter;
} NotifyDirectory;
struct {
ULONG Length;
FILE_INFORMATION_CLASS FileInformationClass;
PFILE_OBJECT FileObject;
BOOLEAN AdvanceOnly;
} SetFile;
struct {
ULONG Length;
FILE_INFORMATION_CLASS FileInformationClass;
} QueryFile;
struct {
ULONG Length;
ULONG EaIndex;
PFILE_GET_EA_INFORMATION EaList;
} QueryEa;
struct {
ULONG Length;
} SetEa;
struct {
ULONG IoControlCode;
ULONG InputBufferLength;
ULONG OutputBufferLength;
ULONG Type3InputBuffer;
} DeviceIoControl;
struct {
PDEVICE_CAPABILITIES Capabilities;
} DeviceCapabilities;
struct {
DEVICE_RELATIONS_TYPE Type;
} QueryDeviceRelations;
struct {
QUERY_ID_TYPE IdType;
} QueryId;
struct {
USAGE_NOTIFICATION_TYPE Type;
BOOLEAN InPath;
} UsageNotification;
struct {
ULONG Length;
SECURITY_INFORMATION SecurityInformation;
} QuerySecurity;
struct {
SECURITY_INFORMATION SecurityInformation;
PSECURITY_DESCRIPTOR SecurityDescriptor;
} SetSecurity;
} Parameters;
} IO_STACK_LOCATION;
#define SL_OVERRIDE_VERIFY_VOLUME (1<<0)
#define SL_OPEN_PAGING_FILE (1<<1)
#define SL_FORCE_ACCESS_CHECK (1<<2)
#define SL_CASE_SENSITIVE (1<<3)
#define SL_OPEN_TARGET_DIRECTORY (1<<4)
#define SL_STOP_ON_SYMLINK (1<<5)
#define SL_INDEX_SPECIFIED (1<<6)
#define SL_RESTART_SCAN (1<<7)
#define SL_RETURN_SINGLE_ENTRY (1<<8)
#define SL_WATCH_TREE (1<<9)
#define SL_WRITE_THROUGH (1<<10)
typedef IO_STACK_LOCATION* PIO_STACK_LOCATION;
struct _IRP;
typedef struct _IRP* PIRP;
typedef NTSTATUS(__stdcall IoCompletionRoutine)(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);
typedef IoCompletionRoutine IO_COMPLETION_ROUTINE;
typedef IoCompletionRoutine* PIO_COMPLETION_ROUTINE;
typedef struct _IRP {
PMDL MdlAddress;
void* UserBuffer;
void* reserved;
char RequestorMode;
IO_STATUS_BLOCK IoStatus;
IO_STACK_LOCATION StackLocation;
struct _AssociatedIrp
{
PVOID SystemBuffer;
} AssociatedIrp;
unsigned int Flags;
PIO_STATUS_BLOCK UserIosb;
PKEVENT UserEvent;
struct {
LARGE_INTEGER AllocationSize;
} Overlay;
struct {
struct {
PETHREAD Thread;
PVOID AuxiliaryBuffer;
} Overlay;
} Tail;
PIO_COMPLETION_ROUTINE CompletionRoutine;
PVOID CompletionRoutineContext;
ULONG CompletionRoutineFlags;
struct _IRP* AssociatedIRP;
} IRP;
typedef IRP* PIRP;
#define COMPLETION_ROUTINE_ON_ERROR (1<<0)
#define COMPLETION_ROUTINE_ON_SUCCESS (1<<1)
#define COMPLETION_ROUTINE_ON_CANCEL (1<<2)
#define IRP_BUFFERED_IO (1<<0)
#define IRP_NOCACHE (1<<1)
#define IRP_DEALLOCATE_BUFFER (1<<2)
#define IRP_INPUT_OPERATION (1<<3)
#define IRP_PAGING_IO (1<<4)
void* MmGetSystemAddressForMdlSafe(PMDL mdl, ULONG priority);
typedef struct _CC_FILE_SIZES {
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES;
typedef CC_FILE_SIZES* PCC_FILE_SIZES;
typedef void(_stdcall* DRIVER_UNLOAD_FUN)(PDRIVER_OBJECT);
typedef void(_stdcall* DRIVER_ADD_DEVICE_FUN)(PDRIVER_OBJECT, PDEVICE_OBJECT);
typedef NTSTATUS(_stdcall* DRIVER_MAJOR_FUN)(PDEVICE_OBJECT, PIRP);
typedef struct _DRIVER_OBJECT_EXTENSION {
DRIVER_ADD_DEVICE_FUN AddDevice;
} DRIVER_OBJECT_EXTENSION;
typedef DRIVER_OBJECT_EXTENSION* PDRIVER_OBJECT_EXTENSION;
struct _FAST_IO_DISPATCH;
typedef struct _FAST_IO_DISPATCH* PFAST_IO_DISPATCH;
typedef struct _DRIVER_OBJECT {
PDEVICE_OBJECT DeviceObject;
PFAST_IO_DISPATCH FastIoDispatch;
DRIVER_UNLOAD_FUN DriverUnload;
PDRIVER_OBJECT_EXTENSION DriverExtension;
DRIVER_MAJOR_FUN MajorFunction[100];
} DRIVER_OBJECT;
typedef DRIVER_OBJECT* PDRIVER_OBJECT;
typedef BOOLEAN(_stdcall *CACHE_MANAGER_ACQUIRE_FUN)(PVOID, BOOLEAN);
typedef void(_stdcall *CACHE_MANAGER_RELEASE_FUN)(PVOID);
typedef struct _CACHE_MANAGER_CALLBACKS {
CACHE_MANAGER_ACQUIRE_FUN AcquireForLazyWrite;
CACHE_MANAGER_RELEASE_FUN ReleaseFromLazyWrite;
CACHE_MANAGER_ACQUIRE_FUN AcquireForReadAhead;
CACHE_MANAGER_RELEASE_FUN ReleaseFromReadAhead;
} CACHE_MANAGER_CALLBACKS;
typedef CACHE_MANAGER_CALLBACKS* PCACHE_MANAGER_CALLBACKS;
typedef struct _REPARSE_DATA_BUFFER {
ULONG ReparseTag;
USHORT ReparseDataLength;
ULONG Reserved;
union {
struct {
ULONG SubstituteNameOffset;
ULONG SubstituteNameLength;
ULONG PrintNameOffset;
ULONG PrintNameLength;
ULONG Flags;
WCHAR PathBuffer[1];
} SymbolicLinkReparseBuffer;
struct {
ULONG SubstituteNameOffset;
ULONG PrintNameOffset;
ULONG SubstituteNameLength;
ULONG PrintNameLength;
WCHAR PathBuffer[1];
} MountPointReparseBuffer;
struct {
char DataBuffer[16];
} GenericReparseBuffer;
};
} REPARSE_DATA_BUFFER;
typedef REPARSE_DATA_BUFFER* PREPARSE_DATA_BUFFER;
typedef struct _ECP_LIST {
int dummy;
} ECP_LIST;
typedef ECP_LIST* PECP_LIST;
typedef enum _KWAIT_READON {
Executive,
UserRequest
} KWAIT_REASON;
typedef struct _IO_APC_ROUTINE {
int dummy;
} IO_APC_ROUTINE;
typedef IO_APC_ROUTINE* PIO_APC_ROUTINE;
typedef struct _KIRQL {
int dummy;
} KIRQL;
typedef KIRQL* PKIRQL;
struct _PEB;
typedef struct _PEB* PPEB;
typedef struct _PROCESS_BASIC_INFORMATION {
PPEB PebBaseAddress;
} PROCESS_BASIC_INFORMATION;
typedef PROCESS_BASIC_INFORMATION* PPROCESS_BASIC_INFORMATION;
typedef enum _PROCESSINFOCLASS {
ProcessBasicInformation
} PROCESSINFOCLASS;
typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
unsigned int FileSystemAttributes;
unsigned int MaximumComponentNameLength;
unsigned int FileSystemNameLength;
char FileSystemName[255];
} FILE_FS_ATTRIBUTE_INFORMATION;
typedef FILE_FS_ATTRIBUTE_INFORMATION* PFILE_FS_ATTRIBUTE_INFORMATION;
typedef enum _DEVICE_TYPE
{
FILE_DEVICE_DISK,
FILE_DEVICE_DISK_FILE_SYSTEM,
FILE_DEVICE_UNKNOWN
} DEVICE_TYPE;
typedef struct _FILE_FS_DEVICE_INFORMATION {
DEVICE_TYPE DeviceType;
unsigned int Characteristics;
} FILE_FS_DEVICE_INFORMATION;
typedef FILE_FS_DEVICE_INFORMATION* PFILE_FS_DEVICE_INFORMATION;
typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER ActualAvailableAllocationUnits;
LARGE_INTEGER CallerAvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
} FILE_FS_FULL_SIZE_INFORMATION;
typedef FILE_FS_FULL_SIZE_INFORMATION* PFILE_FS_FULL_SIZE_INFORMATION;
typedef struct _FILE_FS_OBJECTID_INFORMATION_EXTENED {
int dummy;
} FILE_FS_OBJECTID_INFORMATION_EXTENED;
typedef FILE_FS_OBJECTID_INFORMATION_EXTENED* PFILE_FS_OBJECTID_INFORMATION_EXTENED;
typedef struct _FILE_FS_OBJECTID_INFORMATION {
UCHAR ObjectId[16];
PFILE_FS_OBJECTID_INFORMATION_EXTENED ExtendedInfo;
} FILE_FS_OBJECTID_INFORMATION;
typedef FILE_FS_OBJECTID_INFORMATION* PFILE_FS_OBJECTID_INFORMATION;
typedef struct _FILE_FS_SIZE_INFORMATION {
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER AvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
} FILE_FS_SIZE_INFORMATION;
typedef struct _FILE_FS_VOLUME_INFORMATION {
LARGE_INTEGER VolumeCreationTime;
ULONG VolumeSerialNumber;
ULONG VolumeLabelLength;
BOOLEAN SupportsObjects;
WCHAR VolumeLabel[1];
} FILE_FS_VOLUME_INFORMATION;
typedef FILE_FS_VOLUME_INFORMATION* PFILE_FS_VOLUME_INFORMATION;
typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION {
UINT LogicalBytesPerSector;
UINT PhysicalBytesPerSectorForAtomicity;
UINT PhysicalBytesPerSectorForPerformance;
UINT FileSystemEffectivePhysicalBytesPerSectorForAtomicity;
UINT ByteOffsetForSectorAlignment;
UINT ByteOffsetForPartitionAlignment;
UINT Flags;
} FILE_FS_SECTOR_SIZE_INFORMATION;
typedef FILE_FS_SECTOR_SIZE_INFORMATION* PFILE_FS_SECTOR_SIZE_INFORMATION;
typedef struct _FILE_FS_LABEL_INFORMATION {
WCHAR VolumeLabel[255];
ULONG VolumeLabelLength;
} FILE_FS_LABEL_INFORMATION;
typedef FILE_FS_LABEL_INFORMATION* PFILE_FS_LABEL_INFORMATION;
typedef enum _ACCESS_MODE {
IoWriteAccess,
IoReadAccess
} ACCESS_MODE;
typedef ACCESS_MODE LOCK_OPERATION;
typedef struct _STORAGE_HOTPLUG_INFO {
ULONG MediaRemovable;
} STORAGE_HOTPLUG_INFO;
typedef STORAGE_HOTPLUG_INFO* PSTORAGE_HOTPLUG_INFO;
typedef enum _ATA_FLAGS {
ATA_FLAGS_DATA_IN
} ATA_FLAGS;
typedef struct _ATA_PASS_THROUGH_EX {
ULONG Length;
ATA_FLAGS AtaFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
ULONG DataBufferOffset;
UCHAR CurrentTaskFile[8];
} ATA_PASS_THROUGH_EX;
typedef ATA_PASS_THROUGH_EX* PATA_PASS_THROUGH_EX;
typedef enum _PROPERTY_ID {
StorageDeviceTrimProperty
} PROPERTY_ID;
typedef enum _QUERY_TYPE {
PropertyStandardQuery
} QUERY_TYPE;
typedef struct _STORAGE_PROPERTY_QUERY {
PROPERTY_ID PropertyId;
QUERY_TYPE QueryType;
ULONG AdditionalParameters[1];
} STORAGE_PROPERTY_QUERY;
typedef STORAGE_PROPERTY_QUERY* PSTORAGE_PROPERTY_QUERY;
typedef struct _DEVICE_TRIM_DESCRIPTOR {
BOOLEAN TrimEnabled;
} DEVICE_TRIM_DESCRIPTOR;
typedef DEVICE_TRIM_DESCRIPTOR* PDEVICE_TRIM_DESCRIPTOR;
typedef struct _STORAGE_DEVICE_NUMBER {
ULONG DeviceNumber;
ULONG PartitionNumber;
ULONG DeviceType;
} STORAGE_DEVICE_NUMBER;
typedef STORAGE_DEVICE_NUMBER* PSTORAGE_DEVICE_NUMBER;
typedef struct _IDENTIFY_DEVICE_DATA {
struct _COMMAND_SUPPORT {
BOOLEAN FlushCache;
} CommandSetSupport;
ULONG NominalMediaRotationRate;
} IDENTIFY_DEVICE_DATA;
typedef IDENTIFY_DEVICE_DATA* PIDENTIFY_DEVICE_DATA;
typedef struct _OBJECT_ATTRIBUTES {
wchar_t path[255];
} OBJECT_ATTRIBUTES;
typedef OBJECT_ATTRIBUTES* POBJECT_ATTRIBUTES;
typedef enum _OBJECT_ATTRIBUTE_TYPE {
OBJ_KERNEL_HANDLE = 1,
OBJ_CASE_INSENSITIVE = 2
} OBJECT_ATTRIBUTE_TYPE;
typedef void(__stdcall KSTART_ROUTINE)(PVOID Context);
typedef KSTART_ROUTINE* PKSTART_ROUTINE;
typedef struct _MOUNTDEV_NAME {
ULONG NameLength;
WCHAR Name[1];
} MOUNTDEV_NAME;
typedef MOUNTDEV_NAME* PMOUNTDEV_NAME;
typedef struct _GET_LENGTH_INFORMATION {
LARGE_INTEGER Length;
} GET_LENGTH_INFORMATION;
typedef GET_LENGTH_INFORMATION* PGET_LENGTH_INFORMATION;
typedef struct _TIME_FIELDS {
ULONG Year;
UCHAR Month;
UCHAR Day;
UCHAR Hour;
UCHAR Minute;
UCHAR Second;
} TIME_FIELDS;
typedef TIME_FIELDS* PTIME_FIELDS;
typedef struct _FILE_STANDARD_INFORMATION {
LARGE_INTEGER EndOfFile;
LARGE_INTEGER AllocationSize;
ULONG NumberOfLinks;
BOOLEAN Directory;
BOOLEAN DeletePending;
} FILE_STANDARD_INFORMATION;
typedef FILE_STANDARD_INFORMATION* PFILE_STANDARD_INFORMATION;
typedef struct _FILE_POSITION_INFORMATION {
LARGE_INTEGER CurrentByteOffset;
} FILE_POSITION_INFORMATION;
typedef FILE_POSITION_INFORMATION* PFILE_POSITION_INFORMATION;
typedef enum _REPORT_INTERFACE_TYPE {
InterfaceTypeUndefined
} REPORT_INTERFACE_TYPE;
typedef struct _DEVICE_RELATIONS {
ULONG Count;
PDEVICE_OBJECT Objects[1];
} DEVICE_RELATIONS;
typedef DEVICE_RELATIONS* PDEVICE_RELATIONS;
typedef enum _PLUG_N_PLAY_EVENT_CATEGORIES {
EventCategoryDeviceInterfaceChange,
EventCategoryTargetDeviceChange
} PLUG_N_PLAY_EVENT_CATEGORIES;
typedef NTSTATUS(_stdcall* PNPNOTIFICATION_FUN)(PVOID, PVOID);
typedef void(_stdcall* BOOTDRIVERINIT_FUN)(PDRIVER_OBJECT, PVOID, ULONG);
typedef enum _DEVICE_MANAGE_ACTION {
DeviceDsmAction_Trim
} DEVICE_MANAGE_ACTION;
typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
ULONG Size;
DEVICE_MANAGE_ACTION Action;
ULONG Flags;
ULONG ParameterBlockOffset;
ULONG ParameterBlockLength;
ULONG DataSetRangesOffset;
ULONG DataSetRangesLength;
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES;
typedef DEVICE_MANAGE_DATA_SET_ATTRIBUTES* PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
typedef struct _DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} DEVICE_DATA_SET_RANGE;
typedef DEVICE_DATA_SET_RANGE* PDEVICE_DATA_SET_RANGE;
typedef struct _LUID {
ULONG LowPart;
LONG HighPart;
} LUID;
typedef LUID* PLUID;
typedef struct _MOUNTMGR_TARGET_NAME {
ULONG DeviceNameLength;
WCHAR DeviceName[1];
} MOUNTMGR_TARGET_NAME;
typedef MOUNTMGR_TARGET_NAME* PMOUNTMGR_TARGET_NAME;
typedef struct _KEY_VALUE_FULL_INFORMATION {
ULONG DataOffset;
ULONG DataLength;
ULONG NameLength;
ULONG Type;
WCHAR Name[1];
} KEY_VALUE_FULL_INFORMATION;
typedef KEY_VALUE_FULL_INFORMATION* PKEY_VALUE_FULL_INFORMATION;
typedef struct _KEY_VALUE_BASIC_INFORMATION {
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_BASIC_INFORMATION;
typedef KEY_VALUE_BASIC_INFORMATION* PKEY_VALUE_BASIC_INFORMATION;
typedef enum _QUERY_VALUE_TYPE {
KeyValueFullInformation
} QUERY_VALUE_TYPE;
//static const ULONG NormalPagePriority = 1;
//static const ULONG HighPagePriority = 2;
typedef enum _PAGE_PRIORITY {
NormalPagePriority = 1,
HighPagePriority =2
} PAGE_PRIORITY;
typedef struct _USN {
int dummy;
} USN;
typedef USN* PUSN;
typedef struct _FILE_FULL_EA_INFORMATION {
ULONG EaNameLength;
ULONG EaValueLength;
ULONG NextEntryOffset;
UCHAR Flags;
char EaName[1];
} FILE_FULL_EA_INFORMATION;
typedef FILE_FULL_EA_INFORMATION* PFILE_FULL_EA_INFORMATION;
typedef struct _GENERIC_MAPPING {
int dummy;
} GENERIC_MAPPING;
typedef GENERIC_MAPPING* PGENERIC_MAPPING;
typedef enum _FLUSH_MODE {
MmFlushForWrite,
MmFlushForDelete
} FLUSH_MODE;
typedef struct _FILE_ID_128 {
ULONGLONG LowPart;
ULONGLONG HighPart;
} FILE_ID_128;
typedef FILE_ID_128* PFILE_ID_128;
typedef struct _PRIVILEGE {
LUID Luid;
ULONG Attributes;
} PRIVILEGE;
typedef PRIVILEGE* PPRIVILEGE;
typedef struct _PRIVILEGE_SET {
ULONG PrivilegeCount;
ULONG Control;
PRIVILEGE Privilege[5];
} PRIVILEGE_SET;
typedef PRIVILEGE_SET* PPRIVILEGE_SET;
typedef struct _FILE_BOTH_DIR_INFORMATION {
ULONG NextEntryOffset;
ULONG FileIndex;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER EndOfFile;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileId;
ULONG FileAttributes;
ULONG FileNameLength;
ULONG EaSize;
ULONG ShortNameLength;
WCHAR FileName[1];
} FILE_BOTH_DIR_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION* PFILE_BOTH_DIR_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION FILE_DIRECTORY_INFORMATION;
typedef FILE_DIRECTORY_INFORMATION* PFILE_DIRECTORY_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION FILE_FULL_DIR_INFORMATION;
typedef FILE_FULL_DIR_INFORMATION* PFILE_FULL_DIR_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION FILE_ID_BOTH_DIR_INFORMATION;
typedef FILE_ID_BOTH_DIR_INFORMATION* PFILE_ID_BOTH_DIR_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION FILE_ID_FULL_DIR_INFORMATION;
typedef FILE_ID_FULL_DIR_INFORMATION* PFILE_ID_FULL_DIR_INFORMATION;
typedef struct _FILE_ID_EXTD_DIR_INFORMATION {
ULONG NextEntryOffset;
ULONG FileIndex;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER EndOfFile;
LARGE_INTEGER AllocationSize;
ULONG FileAttributes;
ULONG FileNameLength;
ULONG EaSize;
ULONG ShortNameLength;
ULONG ReparsePointTag;
struct
{
ULONGLONG Identifier[2];
} FileId;
WCHAR FileName[1];
} FILE_ID_EXTD_DIR_INFORMATION;
typedef FILE_ID_EXTD_DIR_INFORMATION* PFILE_ID_EXTD_DIR_INFORMATION;
typedef FILE_ID_EXTD_DIR_INFORMATION FILE_ID_EXTD_BOTH_DIR_INFORMATION;
typedef FILE_ID_EXTD_BOTH_DIR_INFORMATION* PFILE_ID_EXTD_BOTH_DIR_INFORMATION;
typedef FILE_BOTH_DIR_INFORMATION FILE_NAMES_INFORMATION;
typedef FILE_NAMES_INFORMATION* PFILE_NAMES_INFORMATION;
typedef struct _FILE_BASIC_INFORMATION {
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
ULONG FileAttributes;
} FILE_BASIC_INFORMATION;
typedef FILE_BASIC_INFORMATION* PFILE_BASIC_INFORMATION;
typedef struct _FILE_NETWORK_OPEN_INFORMATION {
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
ULONG FileAttributes;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
} FILE_NETWORK_OPEN_INFORMATION;
typedef FILE_NETWORK_OPEN_INFORMATION* PFILE_NETWORK_OPEN_INFORMATION;
typedef BOOLEAN(__stdcall* FAST_IO_CHECK_IF_POSSIBLE)(PFILE_OBJECT, PLARGE_INTEGER, ULONG, BOOLEAN,
ULONG, BOOLEAN, PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_READ)(PFILE_OBJECT, PLARGE_INTEGER, ULONG, BOOLEAN,
ULONG, PVOID, PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_WRITE)(PFILE_OBJECT, PLARGE_INTEGER, ULONG, BOOLEAN,
ULONG, PVOID, PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_QUERY_BASIC_INFO)(PFILE_OBJECT, BOOLEAN, PFILE_BASIC_INFORMATION,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_QUERY_STANDARD_INFO)(PFILE_OBJECT, BOOLEAN, PFILE_STANDARD_INFORMATION,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_LOCK)(PFILE_OBJECT, PLARGE_INTEGER, PLARGE_INTEGER, PEPROCESS, ULONG,
BOOLEAN, BOOLEAN, PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_UNLOCK_SINGLE)(PFILE_OBJECT, PLARGE_INTEGER, PLARGE_INTEGER, PEPROCESS, ULONG,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_UNLOCK_ALL)(PFILE_OBJECT, PEPROCESS,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_UNLOCK_ALL_BY_KEY)(PFILE_OBJECT, PVOID, ULONG,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_QUERY_NETWORK_OPEN_INFO)(PFILE_OBJECT, BOOLEAN, PFILE_NETWORK_OPEN_INFORMATION,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef NTSTATUS(__stdcall* FAST_IO_ACQUIRE_FOR_MOD_WRITE)(PFILE_OBJECT, PLARGE_INTEGER, PERESOURCE*,
PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_MDL_READ)(PFILE_OBJECT, PLARGE_INTEGER, ULONG, ULONG, PMDL*,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_MDL_READ_COMPLETE)(PFILE_OBJECT, PMDL, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_PREPARE_MDL_WRITE)(PFILE_OBJECT, PLARGE_INTEGER, ULONG, ULONG, PMDL*,
PIO_STATUS_BLOCK, PDEVICE_OBJECT);
typedef BOOLEAN(__stdcall* FAST_IO_MDL_WRITE_COMPLETE)(PFILE_OBJECT, PLARGE_INTEGER, PMDL, PDEVICE_OBJECT);
typedef NTSTATUS(__stdcall* FAST_IO_RELEASE_FOR_MOD_WRITE)(PFILE_OBJECT, PERESOURCE, PDEVICE_OBJECT);
typedef NTSTATUS(__stdcall* FAST_IO_ACQUIRE_FOR_CCFLUSH)(PFILE_OBJECT, PDEVICE_OBJECT);
typedef NTSTATUS(__stdcall* FAST_IO_RELEASE_FOR_CCFLUSH)(PFILE_OBJECT, PDEVICE_OBJECT);
typedef struct _FAST_IO_DISPATCH {
ULONG SizeOfFastIoDispatch;
FAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
FAST_IO_READ FastIoRead;
FAST_IO_WRITE FastIoWrite;
FAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
FAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
FAST_IO_LOCK FastIoLock;
FAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
FAST_IO_UNLOCK_ALL FastIoUnlockAll;
FAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
FAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
FAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
FAST_IO_MDL_READ MdlRead;
FAST_IO_MDL_READ_COMPLETE MdlReadComplete;
FAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
FAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
FAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
FAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
FAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
} FAST_IO_DISPATCH;
typedef FAST_IO_DISPATCH* PFAST_IO_DISPATCH;
typedef struct _FILE_DISPOSITION_INFORMATION_EX {
ULONG Flags;
} FILE_DISPOSITION_INFORMATION_EX;
typedef FILE_DISPOSITION_INFORMATION_EX* PFILE_DISPOSITION_INFORMATION_EX;
typedef struct _FILE_DISPOSITION_INFORMATION {
BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION;
typedef FILE_DISPOSITION_INFORMATION_EX* PFILE_DISPOSITION_INFORMATION_EX;
typedef struct _FILE_RENAME_INFORMATION {
ULONG FileNameLength;
ULONG Flags;
BOOLEAN ReplaceIfExists;
HANDLE RootDirectory;
WCHAR FileName[1];
} FILE_RENAME_INFORMATION;
typedef FILE_RENAME_INFORMATION* PFILE_RENAME_INFORMATION;
typedef struct _FILE_END_OF_FILE_INFORMATION {
LARGE_INTEGER EndOfFile;
} FILE_END_OF_FILE_INFORMATION;
typedef FILE_END_OF_FILE_INFORMATION* PFILE_END_OF_FILE_INFORMATION;
typedef struct _FILE_LINK_INFORMATION_EX {
int dummy;
} FILE_LINK_INFORMATION_EX;
typedef FILE_LINK_INFORMATION_EX* PFILE_LINK_INFORMATION_EX;
typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
LARGE_INTEGER ValidDataLength;
} FILE_VALID_DATA_LENGTH_INFORMATION;
typedef FILE_VALID_DATA_LENGTH_INFORMATION* PFILE_VALID_DATA_LENGTH_INFORMATION;
typedef struct _FILE_CASE_SENSITIVE_INFORMATION {
ULONG Flags;
} FILE_CASE_SENSITIVE_INFORMATION;
typedef FILE_CASE_SENSITIVE_INFORMATION* PFILE_CASE_SENSITIVE_INFORMATION;
typedef struct _FILE_LINK_INFORMATION {
ULONG Flags;
BOOLEAN ReplaceIfExists;
HANDLE RootDirectory;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_LINK_INFORMATION;
typedef FILE_LINK_INFORMATION* PFILE_LINK_INFORMATION;
typedef struct _FILE_INTERNAL_INFORMATION {
LARGE_INTEGER IndexNumber;
} FILE_INTERNAL_INFORMATION;
typedef FILE_INTERNAL_INFORMATION* PFILE_INTERNAL_INFORMATION;
typedef struct _FILE_EA_INFORMATION {
ULONG EaSize;
} FILE_EA_INFORMATION;
typedef FILE_EA_INFORMATION* PFILE_EA_INFORMATION;
typedef struct _FILE_NAME_INFORMATION {
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_NAME_INFORMATION;
typedef FILE_NAME_INFORMATION* PFILE_NAME_INFORMATION;
typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
ULONG FileAttributes;
ULONG ReparseTag;
} FILE_ATTRIBUTE_TAG_INFORMATION;
typedef FILE_ATTRIBUTE_TAG_INFORMATION* PFILE_ATTRIBUTE_TAG_INFORMATION;
typedef struct _FILE_STREAM_INFORMATION {
ULONG NextEntryOffset;
ULONG StreamNameLength;
LARGE_INTEGER StreamSize;
LARGE_INTEGER StreamAllocationSize;
WCHAR StreamName[1];
} FILE_STREAM_INFORMATION;
typedef FILE_STREAM_INFORMATION* PFILE_STREAM_INFORMATION;
typedef struct _FILE_STANDARD_LINK_INFORMATION {
ULONG NumberOfAccessibleLinks;
ULONG TotalNumberOfLinks;
BOOLEAN DeletePending;
BOOLEAN Directory;
} FILE_STANDARD_LINK_INFORMATION;
typedef FILE_STANDARD_LINK_INFORMATION* PFILE_STANDARD_LINK_INFORMATION;
typedef struct _FILE_LINK_ENTRY_INFORMATION {
ULONG NextEntryOffset;
ULONGLONG ParentFileId;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_LINK_ENTRY_INFORMATION;
typedef FILE_LINK_ENTRY_INFORMATION* PFILE_LINK_ENTRY_INFORMATION;
typedef struct _FILE_LINKS_INFORMATION {
FILE_LINK_ENTRY_INFORMATION Entry;
ULONG EntriesReturned;
ULONG BytesNeeded;
} FILE_LINKS_INFORMATION;
typedef FILE_LINKS_INFORMATION* PFILE_LINKS_INFORMATION;
typedef struct _FILE_LINK_ENTRY_FULL_ID_INFORMATION {
struct {
char Identifier[16];
} ParentFileId;
ULONG NextEntryOffset;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_LINK_ENTRY_FULL_ID_INFORMATION;
typedef FILE_LINK_ENTRY_FULL_ID_INFORMATION* PFILE_LINK_ENTRY_FULL_ID_INFORMATION;
typedef struct _FILE_LINKS_FULL_ID_INFORMATION {
FILE_LINK_ENTRY_FULL_ID_INFORMATION Entry;
ULONG EntriesReturned;
ULONG BytesNeeded;
} FILE_LINKS_FULL_ID_INFORMATION;
typedef FILE_LINKS_FULL_ID_INFORMATION* PFILE_LINKS_FULL_ID_INFORMATION;
typedef struct _FILE_ID_INFORMATION {
char VolumeSerialNumber[8];
struct
{
char Identifier[16];
} FileId;
} FILE_ID_INFORMATION;
typedef FILE_ID_INFORMATION* PFILE_ID_INFORMATION;
typedef struct _FILE_STAT_INFORMATION {
FILE_ID_128 FileId;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG FileAttributes;
ULONG ReparseTag;
ULONG NumberOfLinks;
ACCESS_MASK EffectiveAccess;
} FILE_STAT_INFORMATION;
typedef FILE_STAT_INFORMATION* PFILE_STAT_INFORMATION;
typedef struct _FILE_STAT_LX_INFORMATION {
FILE_ID_128 FileId;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG FileAttributes;
ULONG ReparseTag;
ULONG NumberOfLinks;
ACCESS_MASK EffectiveAccess;
ULONG LxFlags;
ULONG LxUid;
ULONG LxGid;
ULONG LxMode;
ULONG LxDeviceIdMajor;
ULONG LxDeviceIdMinor;
} FILE_STAT_LX_INFORMATION;
typedef FILE_STAT_LX_INFORMATION* PFILE_STAT_LX_INFORMATION;
typedef struct _FILE_COMPRESSION_INFORMATION {
LARGE_INTEGER CompressedFileSize;
} FILE_COMPRESSION_INFORMATION;
typedef FILE_COMPRESSION_INFORMATION* PFILE_COMPRESSION_INFORMATION;
typedef struct _FILE_ACCESS_INFORMATION {
int dummy;
} FILE_ACCESS_INFORMATION;
typedef FILE_ACCESS_INFORMATION* PFILE_ACCESS_INFORMATION;
typedef struct _FILE_MODE_INFORMATION {
int dummy;
} FILE_MODE_INFORMATION;
typedef FILE_MODE_INFORMATION* PFILE_MODE_INFORMATION;
typedef struct _FILE_ALIGNMENT_INFORMATION {
int dummy;
} FILE_ALIGNMENT_INFORMATION;
typedef FILE_ALIGNMENT_INFORMATION* PFILE_ALIGNMENT_INFORMATION;
typedef struct _FILE_ALL_INFORMATION {
FILE_BASIC_INFORMATION BasicInformation;
FILE_STANDARD_INFORMATION StandardInformation;
FILE_INTERNAL_INFORMATION InternalInformation;
FILE_EA_INFORMATION EaInformation;
FILE_POSITION_INFORMATION PositionInformation;
FILE_NAME_INFORMATION NameInformation;
} FILE_ALL_INFORMATION;
typedef FILE_ALL_INFORMATION* PFILE_ALL_INFORMATION;
typedef struct _OBJECT_TYPE {
int dummy;
} OBJECT_TYPE;
typedef OBJECT_TYPE* POBJECT_TYPE;
extern POBJECT_TYPE* IoFileObjectType;
typedef struct _FILESYSTEM_STATISTICS {
ULONG Version;
ULONG FileSystemType;
ULONG SizeOfCompleteStructure;
} FILESYSTEM_STATISTICS;
typedef FILESYSTEM_STATISTICS* PFILESYSTEM_STATISTICS;
typedef struct _FILE_SET_SPARSE_BUFFER {
BOOLEAN SetSparse;
} FILE_SET_SPARSE_BUFFER;
typedef FILE_SET_SPARSE_BUFFER* PFILE_SET_SPARSE_BUFFER;
typedef struct _FILE_ZERO_DATA_INFORMATION {
LARGE_INTEGER BeyondFinalZero;
LARGE_INTEGER FileOffset;
} FILE_ZERO_DATA_INFORMATION;
typedef FILE_ZERO_DATA_INFORMATION* PFILE_ZERO_DATA_INFORMATION;
typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
LARGE_INTEGER FileOffset;
LARGE_INTEGER Length;
} FILE_ALLOCATED_RANGE_BUFFER;
typedef FILE_ALLOCATED_RANGE_BUFFER* PFILE_ALLOCATED_RANGE_BUFFER;
typedef struct _FILE_OBJECTID_BUFFER {
char ObjectId[16];
ULONG ExtendedInfo;
} FILE_OBJECTID_BUFFER;
typedef FILE_OBJECTID_BUFFER* PFILE_OBJECTID_BUFFER;
typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
ULONG PartitionCount;
} DRIVE_LAYOUT_INFORMATION_EX;
typedef DRIVE_LAYOUT_INFORMATION_EX* PDRIVE_LAYOUT_INFORMATION_EX;
typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
ULONG Flags;
ULONG RequestedOplockLevel;
} REQUEST_OPLOCK_INPUT_BUFFER;
typedef REQUEST_OPLOCK_INPUT_BUFFER* PREQUEST_OPLOCK_INPUT_BUFFER;
typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
int dummy;
} REQUEST_OPLOCK_OUTPUT_BUFFER;
typedef REQUEST_OPLOCK_OUTPUT_BUFFER* PREQUEST_OPLOCK_OUTPUT_BUFFER;
typedef struct _REPARSE_GUID_DATA_BUFFER {
GUID ReparseGuid;
} REPARSE_GUID_DATA_BUFFER;
typedef REPARSE_GUID_DATA_BUFFER* PREPARSE_GUID_DATA_BUFFER;
typedef struct _PFN_NUMBER {
int dummy;
} PFN_NUMBER;
typedef struct _WORK_QUEUE_ITEM {
int dummy;
} WORK_QUEUE_ITEM;
typedef WORK_QUEUE_ITEM* PWORK_QUEUE_ITEM;
typedef enum _REG_ENUM_TYPE {
KeyValueBasicInformation,
KeyBasicInformation
} REG_ENUM_TYPE;
typedef struct _KEY_BASIC_INFORMATION {
ULONG NameLength;
WCHAR Name[1];
} KEY_BASIC_INFORMATION;
typedef KEY_BASIC_INFORMATION* PKEY_BASIC_INFORMATION;
typedef enum _DISK_MEDIA_TYPE {
RemovableMedia,
FixedMedia
} DISK_MEDIA_TYPE;
typedef struct _DISK_GEOMETRY {
ULONG BytesPerSector;
ULONG SectorsPerTrack;
ULONG TracksPerCylinder;
LARGE_INTEGER Cylinders;
DISK_MEDIA_TYPE MediaType;
} DISK_GEOMETRY;
typedef DISK_GEOMETRY* PDISK_GEOMETRY;
typedef struct _MOUNTMGR_MOUNT_POINT {
ULONG DeviceNameOffset;
ULONG DeviceNameLength;
ULONG SymbolicLinkNameOffset;
ULONG SymbolicLinkNameLength;
} MOUNTMGR_MOUNT_POINT;
typedef MOUNTMGR_MOUNT_POINT* PMOUNTMGR_MOUNT_POINT;
typedef struct _MOUNTMGR_MOUNT_POINTS {
ULONG Size;
ULONG NumberOfMountPoints;
MOUNTMGR_MOUNT_POINT MountPoints[1];
} MOUNTMGR_MOUNT_POINTS;
typedef MOUNTMGR_MOUNT_POINTS* PMOUNTMGR_MOUNT_POINTS;
typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
GUID Event;
PUNICODE_STRING SymbolicLinkName;
} DEVICE_INTERFACE_CHANGE_NOTIFICATION;
typedef DEVICE_INTERFACE_CHANGE_NOTIFICATION* PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO {
ULONG EpicNumber;
} MOUNTMGR_CHANGE_NOTIFY_INFO;
typedef MOUNTMGR_CHANGE_NOTIFY_INFO* PMOUNTMGR_CHANGE_NOTIFY_INFO;
typedef struct _ACL{
ULONG AclRevision;
ULONG Sbz1;
unsigned short AclSize;
unsigned short AceCount;
ULONG Sbz2;
} ACL;
typedef ACL* PACL;
typedef struct _ACCESS_ALLOWED_ACE {
struct {
ULONG AceType;
UCHAR AceFlags;
ULONG AceSize;
} Header;
ACCESS_MASK Mask;
char SidStart;
} ACCESS_ALLOWED_ACE;
typedef ACCESS_ALLOWED_ACE* PACCESS_ALLOWED_ACE;
typedef struct _TOKEN_OWNER{
PSID Owner;
} TOKEN_OWNER;
typedef TOKEN_OWNER* PTOKEN_OWNER;
typedef struct _TOKEN_PRIMARY_GROUP{
PSID PrimaryGroup;
} TOKEN_PRIMARY_GROUP;
typedef TOKEN_PRIMARY_GROUP* PTOKEN_PRIMARY_GROUP;
typedef struct __TOKEN_GROUP {
PSID Sid;
} TOKEN_GROUP;
typedef struct _TOKEN_GROUPS {
ULONG GroupCount;
TOKEN_GROUP Groups[1];
} TOKEN_GROUPS;
typedef TOKEN_GROUPS* PTOKEN_GROUPS;
typedef enum _QUERY_INFORMATION_TOKEN_TYPE {
TokenOwner,
TokenPrimaryGroup,
TokenGroups
} QUERY_INFORMATION_TOKEN_TYPE;
typedef struct _MOUNTDEV_UNIQUE_ID {
ULONG UniqueIdLength;
WCHAR UniqueId[1];
} MOUNTDEV_UNIQUE_ID;
typedef MOUNTDEV_UNIQUE_ID* PMOUNTDEV_UNIQUE_ID;
typedef struct _DISK_EXTENT {
int dummy;
} DISK_EXTENT;
typedef DISK_EXTENT* PDISK_EXTENT;
typedef struct _VOLUME_DISK_EXTENTS {
ULONG NumberOfDiskExtents;
DISK_EXTENT Extents[1];
} VOLUME_DISK_EXTENTS;
typedef VOLUME_DISK_EXTENTS* PVOLUME_DISK_EXTENTS;
typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
ULONG GptAttributes;
} VOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
typedef VOLUME_GET_GPT_ATTRIBUTES_INFORMATION* PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
typedef struct _MOUNTDEV_STABLE_GUID {
GUID StableGuid;
} MOUNTDEV_STABLE_GUID;
typedef MOUNTDEV_STABLE_GUID* PMOUNTDEV_STABLE_GUID;
typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET {
ULONG DeviceNameLength;
WCHAR DeviceName[1];
} MOUNTMGR_DRIVE_LETTER_TARGET;
typedef MOUNTMGR_DRIVE_LETTER_TARGET* PMOUNTMGR_DRIVE_LETTER_TARGET;
typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION {
BOOLEAN DriveLetterWasAssigned;
WCHAR CurrentDriveLetter[1];
} MOUNTMGR_DRIVE_LETTER_INFORMATION;
typedef MOUNTMGR_DRIVE_LETTER_INFORMATION* PMOUNTMGR_DRIVE_LETTER_INFORMATION;
typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
GUID Event;
} TARGET_DEVICE_REMOVAL_NOTIFICATION;
typedef TARGET_DEVICE_REMOVAL_NOTIFICATION* PTARGET_DEVICE_REMOVAL_NOTIFICATION;
typedef struct _TOKEN_PRIVILEGE {
LUID Luid;
ULONG Attributes;
} TOKEN_PRIVILEGE;
typedef struct _TOKEN_PRIVILEGES {
ULONG PrivilegeCount;
TOKEN_PRIVILEGE Privileges[1];
} TOKEN_PRIVILEGES;
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
#ifndef ANYSIZE_ARRAY
#define ANYSIZE_ARRAY 1
#endif
#define DRIVERSPECS_H
#ifndef IN
#define IN
#endif
#ifndef OUT
#define OUT
#endif
#define __drv_aliasesMem
#define _Dispatch_type_(x)
#ifndef _Function_class_
#define _Function_class_(x)
#endif
#define NTAPI
#define __kernel_entry
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef OPTIONAL
#define OPTIONAL
#endif
#define FORCEINLINE static
#define DO_BUFFERED_IO (1<<0)
#define DO_DIRECT_IO (1<<1)
#define DO_VERIFY_VOLUME (1<<2)
#define DO_SYSTEM_BOOT_PARTITION (1<<3)
#define DO_DEVICE_INITIALIZING (1<<4)
#define DO_BUS_ENUMERATED_DEVICE (1<<5)
#define IO_DISK_INCREMENT 1
#define IO_NO_INCREMENT 0
#define IO_TYPE_VPB 1
#define VPB_DIRECT_WRITES_ALLOWED (1<<0)
#define VPB_MOUNTED (1<<1)
#define VPB_LOCKED (1<<2)
#define VPB_REMOVE_PENDING (1<<3)
#define FILE_CASE_PRESERVED_NAMES (1<<0)
#define FILE_UNICODE_ON_DISK (1<<1)
#define FILE_NAMED_STREAMS (1<<2)
#define FILE_SUPPORTS_HARD_LINKS (1<<3)
#define FILE_PERSISTENT_ACLS (1<<4)
#define FILE_SUPPORTS_REPARSE_POINTS (1<<5)
#define FILE_SUPPORTS_SPARSE_FILES (1<<6)
#define FILE_SUPPORTS_OBJECT_IDS (1<<7)
#define FILE_SUPPORTS_OPEN_BY_FILE_ID (1<<8)
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES (1<<9)
#define FILE_SUPPORTS_BLOCK_REFCOUNTING (1<<10)
#define FILE_SUPPORTS_POSIX_UNLINK_RENAME (1<<11)
#define FILE_READ_ONLY_VOLUME (1<<12)
#define FILE_CASE_SENSITIVE_SEARCH (1<<13)
#define FILE_READ_ONLY_DEVICE 1
#define SSINFO_FLAGS_ALIGNED_DEVICE 1
#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 2
#define SSINFO_FLAGS_TRIM_ENABLED 4
#define EXCEPTION_EXECUTE_HANDLER 0
#define FILE_NOTIFY_CHANGE_LAST_WRITE (1<<0)
#define FILE_NOTIFY_CHANGE_DIR_NAME (1<<1)
#define FILE_NOTIFY_CHANGE_FILE_NAME (1<<2)
#define FILE_NOTIFY_CHANGE_STREAM_NAME (1<<3)
#define FILE_NOTIFY_CHANGE_SIZE (1<<4)
#define FILE_NOTIFY_CHANGE_ATTRIBUTES (1<<5)
#define FILE_NOTIFY_CHANGE_CREATION (1<<6)
#define FILE_NOTIFY_CHANGE_LAST_ACCESS (1<<7)
#define FILE_NOTIFY_CHANGE_STREAM_SIZE (1<<8)
#define FILE_NOTIFY_CHANGE_EA (1<<9)
#define FILE_NOTIFY_CHANGE_SECURITY (1<<10)
#define FILE_NOTIFY_CHANGE_STREAM_WRITE (1<<11)
#define REG_NOTIFY_CHANGE_LAST_SET (1<<0)
#define FILE_ACTION_MODIFIED 1
#define FILE_ACTION_REMOVED 2
#define FILE_ACTION_ADDED 3
#define FILE_ACTION_ADDED_STREAM 4
#define FILE_ACTION_REMOVED_STREAM 5
#define FILE_ACTION_RENAMED_OLD_NAME 6
#define FILE_ACTION_RENAMED_NEW_NAME 7
#define FILE_ACTION_MODIFIED_STREAM 8
#define FSRTL_FCB_HEADER_V2 (2)
#define FSRTL_FLAG2_IS_PAGING_FILE (1)
#define FSRTL_VOLUME_UNLOCK 3
#define FSRTL_VOLUME_MOUNT 4
#define FSRTL_VOLUME_CHANGE_SIZE 5
#define FSRTL_VOLUME_FORCED_CLOSED 6
#define FSRTL_VOLUME_LOCK 7
#define FSRTL_VOLUME_LOCK_FAILED 8
#define FSRTL_VOLUME_DISMOUNT 9
#define FILE_ATTRIBUTE_DIRECTORY (1<<0)
#define FILE_ATTRIBUTE_REPARSE_POINT (1<<1)
#define FILE_ATTRIBUTE_READONLY (1<<2)
#define FILE_ATTRIBUTE_HIDDEN (1<<3)
#define FILE_ATTRIBUTE_ARCHIVE (1<<4)
#define FILE_ATTRIBUTE_NORMAL (1<<5)
#define FILE_ATTRIBUTE_TEMPORARY (1<<6)
#define FILE_ATTRIBUTE_SYSTEM (1<<7)
#define FILE_CS_FLAG_CASE_SENSITIVE_DIR (1<<0)
//Characteristics
#define FILE_REMOVABLE_MEDIA (1<<6)
#define IOCTL_STORAGE_GET_HOTPLUG_INFO 1
#define IOCTL_STORAGE_CHECK_VERIFY 2
#define IOCTL_STORAGE_GET_DEVICE_NUMBER 3
#define IOCTL_DISK_IS_WRITABLE 4
#define IOCTL_ATA_PASS_THROUGH 5
#define IOCTL_STORAGE_QUERY_PROPERTY 6
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 7
#define IOCTL_DISK_GET_LENGTH_INFO 8
#define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 9
#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION 10
#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX 11
#define IOCTL_DISK_GET_DRIVE_GEOMETRY 12
#define IOCTL_MOUNTMGR_DELETE_POINTS 13
#define IOCTL_VOLUME_ONLINE 14
#define IOCTL_MOUNTMGR_CHANGE_NOTIFY 15
#define IOCTL_MOUNTMGR_QUERY_POINTS 16
#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS 17
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID 18
#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME 19
#define IOCTL_MOUNTDEV_QUERY_STABLE_GUID 20
#define IOCTL_MOUNTDEV_LINK_CREATED 21
#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES 22
#define IOCTL_DISK_CHECK_VERIFY 23
#define IOCTL_VOLUME_BASE 24
#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER 25
#define IOCTL_DISK_UPDATE_PROPERTIES 26
#define IDE_COMMAND_IDENTIFY 1
#define FILE_DEVICE_SECURE_OPEN (1<<0)
#define FILE_AUTOGENERATED_DEVICE_NAME (1<<1)
#define MOUNTMGR_DEVICE_NAME L"MountMgr"
#define FILE_SHARE_READ (1<<0)
#define FILE_SHARE_WRITE (1<<1)
#define FILE_NON_DIRECTORY_FILE (1<<0)
#define FILE_WRITE_THROUGH (1<<1)
#define FILE_SYNCHRONOUS_IO_ALERT (1<<2)
#define FILE_SEQUENTIAL_ONLY (1<<3)
#define FILE_NO_INTERMEDIATE_BUFFERING (1<<4)
#define FILE_SYNCHRONOUS_IO_NONALERT (1<<5)
#define FILE_CREATE_TREE_CONNECTION (1<<6)
#define FILE_COMPLETE_IF_OPLOCKED (1<<7)
#define FILE_NO_EA_KNOWLEDGE (1<<8)
#define FILE_DIRECTORY_FILE (1<<9)
#define FILE_OPEN_REMOTE_INSTANCE (1<<10)
#define FILE_RANDOM_ACCESS (1<<11)
#define FILE_OPEN_BY_FILE_ID (1<<12)
#define FILE_DELETE_ON_CLOSE (1<<13)
#define FILE_OPEN_FOR_BACKUP_INTENT (1<<14)
#define FILE_NO_COMPRESSION (1<<15)
#define FILE_OPEN_REQUIRING_OPLOCK (1<<16)
#define FILE_DISALLOW_EXCLUSIVE (1<<17)
#define FILE_RESERVE_OPFILTER (1<<18)
#define FILE_OPEN_REPARSE_POINT (1<<19)
#define FILE_OPEN_NO_RECALL (1<<20)
#define FILE_OPEN_FOR_FREE_SPACE_QUERY (1<<21)
#define FILE_VALID_OPTION_FLAGS (0xffffffff)
#define FILE_DISPOSITION_DELETE (1<<0)
#define FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK (1<<1)
#define FILE_DISPOSITION_POSIX_SEMANTICS (1<<2)
//Rename
#define FILE_RENAME_IGNORE_READONLY_ATTRIBUTE (1<<0)
#define FILE_RENAME_REPLACE_IF_EXISTS (1<<1)
#define FILE_RENAME_POSIX_SEMANTICS (1<<2)
#define FILE_LINK_REPLACE_IF_EXISTS (1<<0)
#define FILE_LINK_POSIX_SEMANTICS (1<<1)
#define FILE_LINK_IGNORE_READONLY_ATTRIBUTE (1<<2)
//Open Disposition
#define FILE_SUPERSEDE 1
#define FILE_OVERWRITE 2
#define FILE_OVERWRITE_IF 3
#define FILE_OPEN 4
#define FILE_OPEN_IF 5
#define FILE_CREATE 6
#define FILE_OPENED (1<<0)
#define FILE_OVERWRITTEN (1<<1)
#define FILE_SUPERSEDED (1<<2)
#define FILE_CREATED (1<<3)
#define NTDDI_VISTA 6
#define NTDDI_WIN7 7
#define NTDDI_WIN8 8
#define KEY_QUERY_VALUE (1<<0)
#define KEY_ENUMERATE_SUB_KEYS (1<<1)
#define KEY_NOTIFY (1<<2)
#define KEY_SET_VALUE (1<<3)
#define REG_OPTION_NON_VOLATILE (1<<0)
#define REG_OPENED_EXISTING_KEY (1<<1)
#define REG_CREATED_NEW_KEY (1<<2)
#define REG_SZ (1<<3)
#define REG_EXPAND_SZ (1<<4)
#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES (1<<0)
#define DEVICE_DSM_FLAG_TRIM_NOT_FS_ALLOCATED (1<<0)
#define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE (1<<1)
#define SE_MANAGE_VOLUME_PRIVILEGE 1
#define SE_TCB_PRIVILEGE 2
#define GENERIC_READ 1
#define FSRTL_CACHE_TOP_LEVEL_IRP ((PVOID)0x01)
#define FILE_ADD_SUBDIRECTORY 1
#define FILE_ADD_FILE 2
#define IO_REPARSE_TAG_SYMLINK 2
#define IO_REPARSE_TAG_MOUNT_POINT 3
#define IO_REPARSE_TAG_RESERVED_ZERO 0
#define IO_REPARSE_TAG_RESERVED_ONE 1
#define SYMLINK_FLAG_RELATIVE (1<<0)
#define FILE_READ_ATTRIBUTES (1<<0)
#define FILE_WRITE_DATA (1<<1)
#define READ_CONTROL (1<<2)
#define SYNCHRONIZE (1<<3)
#define ACCESS_SYSTEM_SECURITY (1<<4)
#define FILE_READ_DATA (1<<5)
#define FILE_READ_EA (1<<6)
#define FILE_EXECUTE (1<<7)
#define FILE_LIST_DIRECTORY (1<<8)
#define FILE_TRAVERSE (1<<9)
#define DELETE (1<<10)
#define WRITE_OWNER (1<<11)
#define WRITE_DAC (1<<12)
#define FILE_WRITE_EA (1<<13)
#define FILE_WRITE_ATTRIBUTES (1<<14)
#define FILE_DELETE_CHILD (1<<15)
#define FILE_APPEND_DATA (1<<16)
#define FILE_ANY_ACCESS (1<<17)
#define FILE_WRITE_ACCESS (1<<18)
#define FILE_ALL_ACCESS 0xFFF
#define OBJECT_INHERIT_ACE (1<<19)
#define CONTAINER_INHERIT_ACE (1<<20)
#define INHERIT_ONLY_ACE (1<<21)
#define FILE_GENERIC_READ (1<<22)
#define FILE_GENERIC_EXECUTE (1<<23)
#define FILE_GENERIC_WRITE (1<<24)
#define FILE_READ_ACCESS (1<<25)
#define METHOD_BUFFERED 1
#define METHOD_OUT_DIRECT 2
#define METHOD_IN_DIRECT 3
#define METHOD_NEITHER 4
#define FILE_DEVICE_FILE_SYSTEM 1
#define FILE_DEVICE_UNKNOWN 2
//DesiredAccess
#define MAXIMUM_ALLOWED (1<<1)
//EA flags
#define FILE_NEED_EA (1<<1)
//Privilege set control
#define PRIVILEGE_SET_ALL_NECESSARY 1
#define LX_FILE_METADATA_HAS_UID (1<<0)
#define LX_FILE_METADATA_HAS_GID (1<<1)
#define LX_FILE_METADATA_HAS_MODE (1<<2)
#define LX_FILE_METADATA_HAS_DEVICE_ID (1<<3)
#define LX_FILE_CASE_SENSITIVE_DIR (1<<4)
#define MDL_PAGES_LOCKED (1<<0)
#define MDL_PARTIAL (1<<1)
#define IDE_COMMAND_FLUSH_CACHE 1
#define UInt32x32To64(a, b) (((ULONGLONG)a)*((ULONGLONG)b))
#define FILESYSTEM_STATISTICS_TYPE_NTFS 1
#define COMPRESSION_FORMAT_NONE 0
#define FSCTL_REQUEST_OPLOCK 1
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 2
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 3
#define FSCTL_REQUEST_BATCH_OPLOCK 4
#define FSCTL_REQUEST_FILTER_OPLOCK 5
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE 6
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING 7
#define FSCTL_OPLOCK_BREAK_NOTIFY 8
#define FSCTL_OPLOCK_BREAK_ACK_NO_2 9
#define FSCTL_LOCK_VOLUME 10
#define FSCTL_UNLOCK_VOLUME 11
#define FSCTL_DISMOUNT_VOLUME 12
#define FSCTL_IS_VOLUME_MOUNTED 13
#define FSCTL_IS_PATHNAME_VALID 14
#define FSCTL_MARK_VOLUME_DIRTY 15
#define FSCTL_QUERY_RETRIEVAL_POINTERS 16
#define FSCTL_GET_COMPRESSION 17
#define FSCTL_SET_COMPRESSION 18
#define FSCTL_SET_BOOTLOADER_ACCESSED 19
#define FSCTL_INVALIDATE_VOLUMES 20
#define FSCTL_QUERY_FAT_BPB 21
#define FSCTL_FILESYSTEM_GET_STATISTICS 22
#define FSCTL_GET_NTFS_VOLUME_DATA 23
#define FSCTL_GET_NTFS_FILE_RECORD 24
#define FSCTL_GET_VOLUME_BITMAP 25
#define FSCTL_GET_RETRIEVAL_POINTERS 26
#define FSCTL_MOVE_FILE 27
#define FSCTL_IS_VOLUME_DIRTY 28
#define FSCTL_ALLOW_EXTENDED_DASD_IO 29
#define FSCTL_FIND_FILES_BY_SID 30
#define FSCTL_SET_OBJECT_ID 31
#define FSCTL_GET_OBJECT_ID 32
#define FSCTL_DELETE_OBJECT_ID 33
#define FSCTL_SET_REPARSE_POINT 34
#define FSCTL_GET_REPARSE_POINT 35
#define FSCTL_DELETE_REPARSE_POINT 36
#define FSCTL_ENUM_USN_DATA 37
#define FSCTL_SECURITY_ID_CHECK 38
#define FSCTL_READ_USN_JOURNAL 39
#define FSCTL_SET_OBJECT_ID_EXTENDED 40
#define FSCTL_CREATE_OR_GET_OBJECT_ID 41
#define FSCTL_SET_SPARSE 42
#define FSCTL_SET_ZERO_DATA 43
#define FSCTL_QUERY_ALLOCATED_RANGES 44
#define FSCTL_ENABLE_UPGRADE 45
#define FSCTL_SET_ENCRYPTION 46
#define FSCTL_ENCRYPTION_FSCTL_IO 47
#define FSCTL_WRITE_RAW_ENCRYPTED 48
#define FSCTL_READ_RAW_ENCRYPTED 49
#define FSCTL_CREATE_USN_JOURNAL 50
#define FSCTL_READ_FILE_USN_DATA 51
#define FSCTL_WRITE_USN_CLOSE_RECORD 52
#define FSCTL_EXTEND_VOLUME 53
#define FSCTL_QUERY_USN_JOURNAL 54
#define FSCTL_DELETE_USN_JOURNAL 55
#define FSCTL_MARK_HANDLE 56
#define FSCTL_SIS_COPYFILE 57
#define FSCTL_SIS_LINK_FILES 58
#define FSCTL_RECALL_FILE 59
#define FSCTL_READ_FROM_PLEX 60
#define FSCTL_FILE_PREFETCH 61
#define FSCTL_MAKE_MEDIA_COMPATIBLE 62
#define FSCTL_SET_DEFECT_MANAGEMENT 63
#define FSCTL_QUERY_SPARING_INFO 64
#define FSCTL_QUERY_ON_DISK_VOLUME_INFO 65
#define FSCTL_SET_VOLUME_COMPRESSION_STATE 66
#define FSCTL_TXFS_MODIFY_RM 67
#define FSCTL_TXFS_QUERY_RM_INFORMATION 68
#define FSCTL_TXFS_ROLLFORWARD_REDO 69
#define FSCTL_TXFS_ROLLFORWARD_UNDO 70
#define FSCTL_TXFS_START_RM 71
#define FSCTL_TXFS_SHUTDOWN_RM 72
#define FSCTL_TXFS_READ_BACKUP_INFORMATION 73
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION 74
#define FSCTL_TXFS_CREATE_SECONDARY_RM 75
#define FSCTL_TXFS_GET_METADATA_INFO 76
#define FSCTL_TXFS_GET_TRANSACTED_VERSION 77
#define FSCTL_TXFS_SAVEPOINT_INFORMATION 78
#define FSCTL_TXFS_CREATE_MINIVERSION 79
#define FSCTL_TXFS_TRANSACTION_ACTIVE 80
#define FSCTL_SET_ZERO_ON_DEALLOCATION 81
#define FSCTL_SET_REPAIR 82
#define FSCTL_GET_REPAIR 83
#define FSCTL_WAIT_FOR_REPAIR 84
#define FSCTL_INITIATE_REPAIR 85
#define FSCTL_CSC_INTERNAL 86
#define FSCTL_SHRINK_VOLUME 87
#define FSCTL_SET_SHORT_NAME_BEHAVIOR 88
#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE 89
#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES 90
#define FSCTL_TXFS_LIST_TRANSACTIONS 91
#define FSCTL_QUERY_PAGEFILE_ENCRYPTION 92
#define FSCTL_RESET_VOLUME_ALLOCATION_HINTS 93
#define FSCTL_TXFS_READ_BACKUP_INFORMATION2 94
#define FSCTL_CSV_CONTROL 95
#define FSCTL_QUERY_VOLUME_CONTAINER_STATE 96
#define CTL_CODE(a, b, c, d) ((a)*1000000+(b)*1000000+(c)*1000+(d))
#define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (1<<0)
#define REQUEST_OPLOCK_INPUT_FLAG_ACK (1<<1)
#define OPLOCK_LEVEL_CACHE_WRITE (1<<0)
#define OPLOCK_LEVEL_CACHE_HANDLE (1<<1)
#define REPARSE_DATA_BUFFER_HEADER_SIZE 16
#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE 16
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 255
#define UNICODE_NULL ((WCHAR)0)
#define FIELD_OFFSET(type, field) (ULONG)(((unsigned long long)&((type*)0)->field))
#define PAGE_SHIFT 12L
#define PAGE_SIZE 4096
#define REG_DWORD 1
#define REG_QWORD 1
#define SECURITY_NT_AUTHORITY {0x2, 0x3, 0x4, 0x5, 0x6, 0x7}
#define ACL_REVISION 1
#define ACCESS_ALLOWED_ACE_TYPE 2
#define SECURITY_DESCRIPTOR_REVISION 1
#define OWNER_SECURITY_INFORMATION (1<<0)
#define GROUP_SECURITY_INFORMATION (1<<0)
#define DACL_SECURITY_INFORMATION (1<<0)
#define SACL_SECURITY_INFORMATION (1<<0)
#define FILE_WRITE_TO_END_OF_FILE 0xFFFFFFFF
#define SE_LOAD_DRIVER_PRIVILEGE 10
#define INFINITE 0xFFFFFFFF
#define NTSYSCALLAPI
#define HMODULE HANDLE
#define WINAPI
#define CP_UTF8 1
#define TOKEN_ADJUST_PRIVILEGES 1
#define TOKEN_QUERY 2
#define SE_PRIVILEGE_ENABLED 1
#define APIENTRY
#define DLL_PROCESS_ATTACH 1
static const ULONG LowPagePriority = 1;
BOOLEAN FsRtlAreThereCurrentFileLocks(FILE_LOCK* lock);
LONG KeSetEvent(PKEVENT event, int a, BOOLEAN b);
PVOID ExAllocatePoolWithTag(POOL_TYPE PoolType, size_t size, unsigned int tag);
void DbgPrint(const char* msg, ...);
NTSTATUS RtlUnicodeStringPrintf(PUNICODE_STRING out, WCHAR* format, ...);
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING Dest, PUNICODE_STRING Source, BOOLEAN Allocate);
PETHREAD PsGetCurrentThread();
NTSTATUS RtlStringCbVPrintfA(char* dest, size_t dest_size, const char* format, va_list argList);
NTSTATUS RtlUpperString(STRING* Dest, STRING* Source);
void RtlZeroMemory(void* buf, size_t len);
void KeInitializeEvent(PKEVENT Event, EVENT_TYPE Type, BOOLEAN State);
PIRP IoAllocateIrp(const char StackSize, BOOLEAN ChargeQuota);
PIO_STACK_LOCATION IoGetNextIrpStackLocation(PIRP Irp);
PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp);
PMDL IoAllocateMdl(PVOID VirtualAddress, ULONG Length, BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota, PIRP Irp);
void MmBuildMdlForNonPagedPool(PMDL Mdl);
NTSTATUS KeWaitForSingleObject(PVOID Object, KWAIT_REASON WaitReason, REQMODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER Timeout);
void IoSetCompletionRoutine(PIRP Irp, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID Context, BOOLEAN InvokeOnSucces, BOOLEAN InvokeOnError, BOOLEAN InvokeOnCancel);
NTSTATUS IoCallDriver(PDEVICE_OBJECT DeviceObject, PIRP Irp);
void IoFreeMdl(PMDL mdl);
void IoFreeIrp(PIRP Irp);
NTSTATUS ZwWriteFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key);
void ExFreePool(PVOID buf);
PIRP IoGetTopLevelIrp();
void IoSetTopLevelIrp(PIRP Irp);
NTSTATUS IoDeleteSymbolicLink(PUNICODE_STRING Path);
NTSTATUS IoDeleteDevice(PDEVICE_OBJECT DeviceObject);
BOOLEAN IsListEmpty(const LIST_ENTRY* ListHead);
PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead);
FORCEINLINE void InitializeListHead(PLIST_ENTRY ListHead)
{
ListHead->Flink = ListHead;
ListHead->Blink = ListHead;
}
FORCEINLINE void InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry)
{
PLIST_ENTRY LastEntry = ListHead->Blink;
ListEntry->Flink = ListHead;
ListEntry->Blink = LastEntry;
ListHead->Blink = ListEntry;
LastEntry->Flink = ListEntry;
}
PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead);
BOOLEAN RemoveEntryList(PLIST_ENTRY ListEntry);
void InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry);
void ObDereferenceObject(PVOID FileObject);
void ZwClose(HANDLE hFile);
size_t RtlCompareMemory(const void* const src1, const void* const src2, size_t len);
FORCEINLINE void RtlCopyMemory(PVOID dst, const void* src, size_t len)
{
memcpy(dst, src, len);
}
void RtlMoveMemory(PVOID dst, const void* src, size_t len);
void FsRtlEnterFileSystem();
void FsRtlExitFileSystem();
void IoCompleteRequest(PIRP Irp, char PriorityBoost);
NTSTATUS FsRtlCheckOplock(POPLOCK Oplock, PVOID CallbackData, PVOID Context, PVOID WaitCompletionRoutine, PVOID PrePostCallbackDataRoutine);
void CcFlushCache(PSECTION_OBJECT_POINTERS SectionObjectPointers, PLARGE_INTEGER FileOffset, ULONG Length, PIO_STATUS_BLOCK IoStatus);
KAFFINITY KeQueryActiveProcessors();
NTSTATUS ZwQueryInformationProcess(HANDLE ProcessHandle, PROCESSINFOCLASS InformationType, PVOID info, ULONG info_length, PULONG ret_len);
HANDLE NtCurrentProcess();
BOOLEAN FsRtlAreNamesEqual(PUNICODE_STRING name1, PUNICODE_STRING name2, BOOLEAN ignore_case, PVOID UpcaseTable);
ULONG RtlWalkFrameChain(void** chain, ULONG n1, ULONG n2);
NTSTATUS FsRtlNotifyVolumeEvent(PFILE_OBJECT Vol, ULONG Action);
PFILE_OBJECT FsRtlNotifyGetLastVolumeEventsubject();
NTSTATUS FsRtlNotifyFilterReportChange(PNOTIFY_SYNC NotifySync, PLIST_ENTRY DirNotifyList, PSTRING fn, USHORT name_offset, PSTRING stream, PVOID arg1, ULONG filter_match, ULONG action, PVOID arg2, PVOID arg3);
LONG InterlockedIncrement(LONG volatile* val);
LONGLONG InterlockedIncrement64(LONGLONG volatile* val);
LONG InterlockedDecrement(LONG volatile* val);
void ExFreeToNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside, PVOID Entry);
void ExFreeToPagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside, PVOID Entry);
void ExDeletePagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside);
void ExDeleteNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside);
void FsRtlUninitializeFileLock(PFILE_LOCK FileLock);
void FsRtlUninitializeOplock(POPLOCK Oplock);
void RtlFreeUnicodeString(PUNICODE_STRING String);
BOOLEAN CcUninitializeCacheMap(PFILE_OBJECT FileObject, PVOID arg1, PVOID arg2);
void IoAcquireVpbSpinLock(PKIRQL Irql);
void IoReleaseVpbSpinLock(KIRQL Irql);
void KeSetTimer(PKTIMER Timer, LARGE_INTEGER Time, PVOID arg1);
void IoDetachDevice(PDEVICE_OBJECT DeviceObject);
void CcSetFileSizes(PFILE_OBJECT FileObject, PCC_FILE_SIZES FileSizes);
NTSTATUS GetExceptionCode();
void KeQuerySystemTime(PLARGE_INTEGER Time);
void IoRemoveShareAccess(PFILE_OBJECT FileObject, PSHARE_ACCESS ShareAccess);
PEPROCESS IoGetRequestorProcess(PIRP Irp);
NTSTATUS FsRtlFastUnlockAll(PFILE_LOCK FileLock, PFILE_OBJECT FileObject, PEPROCESS Requestor, PVOID arg1);
void FsRtlNotifyCleanup(PNOTIFY_SYNC NotifySync, PLIST_ENTRY NotifyList, PVOID arg1);
void CcPurgeCacheSection(PSECTION_OBJECT_POINTERS SectionPointers, PLARGE_INTEGER FileOffset, ULONG Length, ULONG Flags);
void MmProbeAndLockPages(PMDL Mdl, REQMODE Reqmode, ACCESS_MODE AccessMode);
void MmUnlockPages(PMDL Mdl);
PIRP IoBuildDeviceIoControlRequest(ULONG ControlCode, PDEVICE_OBJECT DeviceObject, PVOID InputBuffer, ULONG InputBufferSize, PVOID OutputBuffer, ULONG OutputBufferSize, BOOLEAN Internal, PKEVENT Event, PIO_STATUS_BLOCK IoStatusBlock);
void CcInitializeCacheMap(PFILE_OBJECT FileObject, PCC_FILE_SIZES CcFileSizes, BOOLEAN PinAccess, PCACHE_MANAGER_CALLBACKS Callbacks, PVOID Context);
void CcSetReadAheadGranularity(PFILE_OBJECT FileObject, ULONG Size);
void KeInitializeSpinLock(PKSPIN_LOCK Spinlock);
void InitializeObjectAttributes(POBJECT_ATTRIBUTES ObjectAttributes, PUNICODE_STRING arg1, OBJECT_ATTRIBUTE_TYPE Type, PVOID arg2, PVOID arg3);
NTSTATUS PsCreateSystemThread(HANDLE* hThread, ULONG access, POBJECT_ATTRIBUTES attr, HANDLE process, PVOID arg1, PKSTART_ROUTINE Routine, PVOID Context);
NTSTATUS IoGetDeviceInterfaces(PGUID arg1, PVOID arg2, ULONG len, WCHAR** list);
NTSTATUS IoRegisterDeviceObjectPointer(PUNICODE_STRING Name, PFILE_OBJECT FileObject, PDEVICE_OBJECT DeviceObject);
NTSTATUS IoGetDeviceObjectPointer(PUNICODE_STRING Name, ULONG ObjectPointerType, PFILE_OBJECT* FileObject, PDEVICE_OBJECT* DeviceObject);
void ObReferenceObject(PVOID Obj);
PDEVICE_OBJECT IoGetLowerDeviceObject(PDEVICE_OBJECT DeviceObject);
NTSTATUS IoCreateDevice(PDRIVER_OBJECT DriverObject, ULONG Length, PUNICODE_STRING Name, DEVICE_TYPE Type, ULONG Characteristics, BOOLEAN Exclusive, PDEVICE_OBJECT* DeviceObject);
BOOLEAN IoIsErrorUserInduced(NTSTATUS Status);
void IoSetHardErrorOrVerifyDevice(PIRP Irp, PDEVICE_OBJECT DeviceObject);
void ExInitializeFastMutex(PFAST_MUTEX FastMutex);
void FsRtlNotifyInitializeSync(PNOTIFY_SYNC* NotifySync);
void ExInitializePagedLookasideList(PPAGED_LOOKASIDE_LIST LookasideList, PVOID arg1, PVOID arg2, ULONG Flags, SIZE_T Size, ULONG Tag, USHORT Depth);
void ExInitializeNPagedLookasideList(PNPAGED_LOOKASIDE_LIST LookasideList, PVOID arg1, PVOID arg2, ULONG Flags, SIZE_T Size, ULONG Tag, USHORT Depth);
void IoRaiseInformationalHardError(NTSTATUS Status, PUNICODE_STRING Msg, PKTHREAD Thread);
PFILE_OBJECT IoCreateStreamFileObject(PVOID arg1, PDEVICE_OBJECT DeviceObject);
NTSTATUS FsRtlProcessFileLock(PFILE_LOCK FileLock, PIRP Irp, PVOID arg1);
void RtlInitUnicodeString(PUNICODE_STRING InitStr, WCHAR* Str);
void IoUnregisterFileSystem(PDEVICE_OBJECT DeviceObject);
void IoUnregisterPlugPlayNotification(PVOID Entry);
void PoStartNextPowerIrp(PIRP Irp);
void IoSkipCurrentIrpStackLocation(PIRP Irp);
NTSTATUS PoCallDriver(PDEVICE_OBJECT DeviceObject, PIRP Irp);
PVOID ExAllocateFromNPagedLookasideList(PNPAGED_LOOKASIDE_LIST LookasideList);
PVOID ExAllocateFromPagedLookasideList(PPAGED_LOOKASIDE_LIST LookasideList);
void KeClearEvent(PKEVENT Event);
void KeInitializeTimer(PKTIMER Timer);
void KeCancelTimer(PKTIMER Timer);
void PsTerminateSystemThread(NTSTATUS Status);
NTSTATUS ZwCreateFile(HANDLE* pHandle, ULONG PointerType, POBJECT_ATTRIBUTES ObjectAttributes, PIO_STATUS_BLOCK IoStatusBlock, PVOID arg1, ULONG Attributes, ULONG ShareMode, ULONG OpenMode, ULONG Flags, PVOID arg2, ULONG arg3);
NTSTATUS ZwQueryInformationFile(HANDLE Handle, PIO_STATUS_BLOCK IoStatusBlock, PVOID Out, ULONG OutLen, FILE_INFORMATION_CLASS InformationType);
NTSTATUS ZwSetInformationFile(HANDLE Handle, PIO_STATUS_BLOCK IoStatusBlock, PVOID In, ULONG InLen, FILE_INFORMATION_CLASS InformationType);
void RtlTimeToTimeFields(PLARGE_INTEGER Time, PTIME_FIELDS TimeFields);
NTSTATUS IoCreateSymbolicLink(PUNICODE_STRING Name, PUNICODE_STRING Target);
NTSTATUS IoRegisterDeviceInterface(PDEVICE_OBJECT DeviceObject, PGUID Guid, PVOID arg1, PUNICODE_STRING Name);
PDEVICE_OBJECT IoAttachDeviceToDeviceStack(PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT AttachDeviceObject);
NTSTATUS IoSetDeviceInterfaceState(PUNICODE_STRING Name, BOOLEAN set);
PVOID MmGetSystemRoutineAddress(PUNICODE_STRING Name);
NTSTATUS ZwCreateKey(HANDLE* hKey, ULONG Action, POBJECT_ATTRIBUTES ObjectAttributes, ULONG arg1, PVOID arg2, ULONG Flags, PULONG Disposition);
NTSTATUS IoReportDetectedDevice(PDRIVER_OBJECT DriverObject, REPORT_INTERFACE_TYPE InterfaceType, ULONG arg1, ULONG arg2, PVOID arg3, PVOID arg4, ULONG arg5, PDEVICE_OBJECT* DeviceObject);
void IoInvalidateDeviceRelations(PDEVICE_OBJECT DeviceObject, DEVICE_RELATIONS_TYPE DeviceRelation);
NTSTATUS IoRegisterPlugPlayNotification(PLUG_N_PLAY_EVENT_CATEGORIES EventCategory, ULONG Flags, PVOID arg1, PDRIVER_OBJECT DriverObject1, PNPNOTIFICATION_FUN NotificationFun, PVOID Context, PVOID arg2);
void IoRegisterFileSystem(PDEVICE_OBJECT DeviceObject);
void IoRegisterBootDriverReinitialization(PDRIVER_OBJECT DriverObject, BOOTDRIVERINIT_FUN InitFun, PVOID Context);
LUID RtlConvertLongToLuid(LONG Long);
BOOLEAN SeSinglePrivilegeCheck(LUID Lid, KPROCESSOR_MODE processor_mode);
void RtlInitializeBitMap(PRTL_BITMAP Bitmap, PULONG Buffer, ULONG Size);
void RtlSetAllBits(PRTL_BITMAP Bitmap);
void RtlClearBits(PRTL_BITMAP Bitmap, ULONG Start, ULONG Len);
BOOLEAN RtlCheckBit(PRTL_BITMAP Bitmap, ULONG Off);
BOOLEAN RtlAreBitsClear(PRTL_BITMAP Bitmap, ULONG Start, ULONG Len);
void RtlSetBit(PRTL_BITMAP Bitmap, ULONG Off);
void RtlClearAllBits(PRTL_BITMAP Bitmap);
void RtlSetBits(PRTL_BITMAP Bitmap, ULONG Start, ULONG Len);
ULONG RtlFindNextForwardRunClear(PRTL_BITMAP Bitmap, ULONG Off, PULONG Start);
ULONG RtlFindFirstRunClear(PRTL_BITMAP Bitmap, PULONG Start);
NTSTATUS ZwOpenSymbolicLinkObject(HANDLE hObj, ULONG OpenMode, POBJECT_ATTRIBUTES Attrs);
NTSTATUS ZwQuerySymbolicLinkObject(HANDLE hObj, PUNICODE_STRING Target, PULONG retlen);
void NtClose(HANDLE hObj);
NTSTATUS ZwQueryValueKey(HANDLE hObj, PUNICODE_STRING Name, QUERY_VALUE_TYPE Type, PKEY_VALUE_FULL_INFORMATION KvInf, ULONG KvInfLen, PULONG KvInfLenOut);
PKTHREAD KeGetCurrentThread();
void KeAcquireSpinLock(PKSPIN_LOCK Spinlock, PKIRQL Irql);
void KeReleaseSpinLock(PKSPIN_LOCK Spinlock, KIRQL Irql);
void KeSetSystemAffinityThread(KAFFINITY Affinity);
void FsRtlSetupAdvancedHeader(PFSRTL_ADVANCED_FCB_HEADER Header, PFAST_MUTEX FastMutex);
void FsRtlInitializeFileLock(PFILE_LOCK FileLock, PVOID arg1, PVOID arg2);
void FsRtlInitializeOplock(POPLOCK Oplock);
NTSTATUS IoCheckEaBufferValidity(PFILE_FULL_EA_INFORMATION EaInformation, ULONG Length, PULONG Offset);
BOOLEAN RtlValidRelativeSecurityDescriptor(PVOID SecurityDescriptor, ULONG Length, PVOID arg1);
void SeLockSubjectContext(PSECURITY_SUBJECT_CONTEXT SecSubjContext);
BOOLEAN SeAccessCheck(PSECURITY_DESCRIPTOR Sd, PSECURITY_SUBJECT_CONTEXT SecSubjContext, BOOLEAN b, ULONG FileOption, ULONG arg1, PVOID arg2, PGENERIC_MAPPING GenMap, REQMODE Reqmode, ACCESS_MASK* Access, NTSTATUS* status);
PGENERIC_MAPPING IoGetFileObjectGenericMapping();
void IoSetShareAccess(ACCESS_MASK Access, ULONG DesiredAccess, PFILE_OBJECT FileObj, PSHARE_ACCESS ShareAccess);
void SeUnlockSubjectContext(PSECURITY_SUBJECT_CONTEXT SecSubjContext);
BOOLEAN MmFlushImageSection(PSECTION_OBJECT_POINTERS SectionPointers, FLUSH_MODE FlushMode);
BOOLEAN MmCanFileBeTruncated(PSECTION_OBJECT_POINTERS SectionPointers, PLARGE_INTEGER Size);
NTSTATUS IoCheckShareAccess(ACCESS_MASK AccessMask, ULONG Granted, PFILE_OBJECT FileObject, PSHARE_ACCESS ShareAccess, BOOLEAN b1);
void IoUpdateShareAccess(PFILE_OBJECT, PSHARE_ACCESS ShareAccess);
PDEVICE_OBJECT IoGetDeviceToVerify(PETHREAD Thread);
void IoSetDeviceToVerify(PETHREAD Thread, PDEVICE_OBJECT DevObj);
NTSTATUS IoVerifyVolume(PDEVICE_OBJECT DevObj, BOOLEAN verify);
BOOLEAN SePrivilegeCheck(PPRIVILEGE_SET PrivilegeSet, PSECURITY_SUBJECT_CONTEXT SecSubjContext, KPROCESSOR_MODE ProcessorMode);
BOOLEAN FsRtlDoesNameContainWildCards(PUNICODE_STRING Str);
BOOLEAN FsRtlIsNameInExpression(PUNICODE_STRING Expression, PUNICODE_STRING Name, BOOLEAN IgnoreCase, PVOID arg1);
void FsRtlNotifyFilterChangeDirectory(PNOTIFY_SYNC NotifySync, PLIST_ENTRY DirList, PVOID FsContext, PSTRING Filename,
ULONG Flags, BOOLEAN b1, ULONG CompletionFilter, PIRP Irp, PVOID arg1, PVOID arg2, PVOID arg3);
void FsRtlNotifyFullChangeDirectory(PNOTIFY_SYNC NotifySync, PLIST_ENTRY DirList, PVOID FsContext, PVOID arg1,
BOOLEAN arg2, BOOLEAN arg3, ULONG arg4, PVOID arg5, PVOID arg6, PVOID arg7);
BOOLEAN FsRtlCopyRead(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, BOOLEAN Wait, ULONG LockKey,
PVOID Buf, PIO_STATUS_BLOCK Status, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlMdlReadDev(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, ULONG LockKey, PMDL* Chain,
PIO_STATUS_BLOCK Status, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlMdlReadCompleteDev(PFILE_OBJECT FileObject, PMDL Chain, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlPrepareMdlWriteDev(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, ULONG LockKey, PMDL* Chain,
PIO_STATUS_BLOCK Status, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlMdlWriteCompleteDev(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, PMDL Chain, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlFastCheckLockForRead(PFILE_LOCK FileLock, PLARGE_INTEGER Offset, PLARGE_INTEGER Len, ULONG Key, PFILE_OBJECT FileObj,
PVOID ProcId);
BOOLEAN FsRtlFastCheckLockForWrite(PFILE_LOCK FileLock, PLARGE_INTEGER Offset, PLARGE_INTEGER Len, ULONG Key, PFILE_OBJECT FileObj,
PVOID ProcId);
BOOLEAN FsRtlCopyWrite(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, BOOLEAN Wait, ULONG LockKey,
PVOID Buf, PIO_STATUS_BLOCK Status, PDEVICE_OBJECT DeviceObject);
BOOLEAN FsRtlFastLock(PFILE_LOCK FileLock, PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, PLARGE_INTEGER Len,
PEPROCESS ProcID, ULONG Key, BOOLEAN FailImmediately, BOOLEAN ExclusiveLock, PIO_STATUS_BLOCK Status, PVOID arg1, BOOLEAN arg2);
NTSTATUS FsRtlFastUnlockSingle(PFILE_LOCK FileLock, PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, PLARGE_INTEGER Len,
PEPROCESS ProcID, ULONG Key, PVOID arg1, BOOLEAN arg2);
NTSTATUS FsRtlFastUnlockAllByKey(PFILE_LOCK FileLock, PFILE_OBJECT FileObject,
PEPROCESS ProcID, ULONG Key, PVOID arg1);
ULONG RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor);
void SeCaptureSubjectContext(PSECURITY_SUBJECT_CONTEXT SecurityContext);
void SeReleaseSubjectContext(PSECURITY_SUBJECT_CONTEXT SecurityContext);
NTSTATUS SeAssignSecurity(PSECURITY_DESCRIPTOR SecurityDescriptor,
PVOID arg1, PVOID* SdLink, BOOLEAN arg2, PSECURITY_SUBJECT_CONTEXT SecurityContext,
PGENERIC_MAPPING Mapping, POOL_TYPE PoolType);
NTSTATUS RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
PSID* Owner, BOOLEAN* defaulted);
LARGE_INTEGER KeQueryPerformanceCounter(PLARGE_INTEGER arg1);
ULONG RtlRandomEx(PULONG Prev);
BOOLEAN IoIs32bitProcess(PIRP Irp);
HANDLE Handle32ToHandle(void* POINTER_32 ptr);
HANDLE ObRegisterHandle(PVOID Object);
NTSTATUS ObDeregisterHandle(HANDLE Handle);
NTSTATUS ObReferenceObjectByHandle(HANDLE Handle, ACCESS_MASK Access,
POBJECT_TYPE ObjectType, KPROCESSOR_MODE ProcMode, PVOID* Object, PVOID arg1);
BOOLEAN KeReadStateEvent(PKEVENT Event);
HANDLE LongToHandle(ULONG tLong);
void CcWaitForCurrentLazyWriterActivity();
NTSTATUS SeAssignSecurityEx(PSECURITY_DESCRIPTOR SecurityDescriptor, PVOID arg1, PVOID* Sd, PVOID arg2,
BOOLEAN Directory, ULONG Flags, PSECURITY_SUBJECT_CONTEXT SecSubjContext, PGENERIC_MAPPING Mapping, POOL_TYPE PoolType);
NTSTATUS FsRtlOplockFsctrl(POPLOCK Oplock, PIRP Irp, ULONG Count);
BOOLEAN IsReparseTagMicrosoft(ULONG ReparseTag);
void IoAdjustPagingPathCount(LONG* Count, BOOL b1);
PIRP IoMakeAssociatedIrp(PIRP Irp, char StackSize);
void CcMdlRead(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL* Address, PIO_STATUS_BLOCK Status);
void IoMarkIrpPending(PIRP Irp);
BOOLEAN CcCopyRead(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, BOOLEAN Wait, PUCHAR Data, PIO_STATUS_BLOCK Status);
BOOLEAN IoIsSystemThread(PETHREAD Thread);
PEPROCESS PsGetThreadProcess(PETHREAD Thread);
//void fPsUpdateDiskCounters(PEPROCESS Process, ULONG Num, ULONG arg1, ULONG arg2, ULONG arg3, ULONG arg4);
void CcMdlReadComplete(PFILE_OBJECT FileObject, PMDL Mdl);
BOOLEAN IoIsOperationSynchronous(PIRP Irp);
BOOLEAN FsRtlCheckLockForReadAccess(PFILE_LOCK Lock, PIRP Irp);
NTSTATUS ZwEnumerateValueKey(HANDLE h, ULONG index, REG_ENUM_TYPE EnumyType, PVOID Out, ULONG OutLen, PULONG retlen);
NTSTATUS ZwOpenKey(PHANDLE h, ULONG Access, POBJECT_ATTRIBUTES Attr);
NTSTATUS ZwSetValueKey(HANDLE h, PUNICODE_STRING Path, ULONG Idx, ULONG Type, PVOID Data, ULONG DataLen);
NTSTATUS ZwDeleteKey(HANDLE h);
NTSTATUS ZwEnumerateKey(HANDLE h, ULONG Idx, REG_ENUM_TYPE EnumType, PVOID Out, ULONG OutLen, PULONG retlen);
NTSTATUS ZwDeleteValueKey(HANDLE h, PUNICODE_STRING Path);
NTSTATUS ZwNotifyChangeKey(HANDLE h, PVOID arg1, PVOID arg2, PVOID arg3, PIO_STATUS_BLOCK IoSb, ULONG Action, BOOLEAN arg4,
PVOID arg5, ULONG arg6, BOOLEAN arg7);
typedef void(*WQFUN)(PVOID arg);
void ExInitializeWorkItem(PWORK_QUEUE_ITEM Wqi, WQFUN Fun, HANDLE h);
NTSTATUS SeQueryInformationToken(PACCESS_TOKEN Token, QUERY_INFORMATION_TOKEN_TYPE TokenType, PVOID Out);
ULONG RtlLengthSid(PSID Sid);
BOOLEAN RtlEqualSid(PSID SidA, PSID SidB);
NTSTATUS RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR Sd, ULONG SdRevision);
NTSTATUS RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR Sd, PSID Sid, BOOLEAN arg1);
NTSTATUS RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR Sd, PSID Sid, BOOLEAN arg1);
NTSTATUS RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR Sd, BOOLEAN ar1, PACL Acl, BOOLEAN arg2);
NTSTATUS RtlAbsoluteToSelfRelativeSD(PSECURITY_DESCRIPTOR Sd, PVOID arg1, PULONG len);
NTSTATUS RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR Sd, PVOID arg1, PULONG Abslen, PVOID arg2,
PULONG DaclLen, PVOID arg3, PULONG SaclLen, PVOID arg4, PULONG OwnerLen, PVOID arg5, PULONG GroupLen);
NTSTATUS SeQuerySecurityDescriptorInfo(PSECURITY_INFORMATION Flags, PSECURITY_DESCRIPTOR Sd,
PULONG BufLen, PVOID* SdOut);
NTSTATUS SeSetSecurityDescriptorInfo(PVOID arg1, PSECURITY_INFORMATION Flags, PSECURITY_DESCRIPTOR Sd,
PVOID* SdOut, POOL_TYPE PoolType, PGENERIC_MAPPING Mapping);
void ExAcquireFastMutex(PFAST_MUTEX Mutex);
void ExReleaseFastMutex(PFAST_MUTEX Mutex);
PVOID MmGetMdlVirtualAddress(PMDL Mdl);
void IoBuildPartialMdl(PMDL MdlAdress, PMDL Mdl, PVOID Ptr, ULONG Len);
void IoCancelIrp(PIRP Irp);
BOOLEAN CcCanIWrite(PFILE_OBJECT FileObject, ULONG Length, BOOLEAN Wait, BOOLEAN Deferred);
void CcPrepareMdlWrite(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL* Mdl, PIO_STATUS_BLOCK Status);
BOOLEAN CcCopyWrite(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, BOOLEAN Wait, PVOID Buffer);
BOOLEAN FsRtlCheckLockForWriteAccess(PFILE_LOCK FileLock, PIRP Irp);
void CcMdlWriteComplete(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, PMDL Mdl);
BOOLEAN WdmlibRtlIsNtDdiVersionAvailable(ULONG Version);
void init_windef();
static HANDLE GetCurrentProcess(void) { return 0; }
BOOL OpenProcessToken(HANDLE hProc, ULONG Flags, PHANDLE Token);
BOOL LookupPrivilegeValueW(PVOID ptr1, WCHAR* Name, PLUID Luid);
static void GetSystemTimeAsFileTime(FILETIME* Filetime) {
Filetime->dwLowDateTime = 0;
Filetime->dwHighDateTime = 0;
}
ULONG WideCharToMultiByteInt(ULONG Codepage, DWORD Flags, WCHAR* Wchar, int NumWchar, char* buf, ULONG blen, PVOID ptr1, PVOID ptr2);
static ULONG WideCharToMultiByte(ULONG Codepage, DWORD Flags, WCHAR* Wchar, int NumWchar, char* buf, ULONG blen, PVOID ptr1, PVOID ptr2)
{
return WideCharToMultiByteInt(Codepage, Flags, Wchar, NumWchar, buf, blen, ptr1, ptr2);
}
NTSTATUS NtDeviceIoControlFile(HANDLE h, PVOID ptr1, PVOID ptr2, PVOID ptr3, PIO_STATUS_BLOCK Iocb, ULONG Cmd,
PVOID Apte1, ULONG Ape1Len, PVOID Apte2, ULONG Ape2Len);
void RegisterNtFile(WCHAR* Name, PVOID file);
void UnregisterNtFile(WCHAR* Name);
NTSTATUS NtOpenFile(PHANDLE Handle, ULONG Attributes, POBJECT_ATTRIBUTES Atts, PIO_STATUS_BLOCK iosb,
ULONG SharingMode, ULONG AlertMode);
NTSTATUS NtWriteFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer,
ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key);
NTSTATUS NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer,
ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key);
static void CloseHandle(HANDLE h) {}
BOOL AdjustTokenPrivileges(HANDLE token, BOOL b, TOKEN_PRIVILEGES* TokenPrivs, ULONG TokenPrivsSize, PVOID ptr1, PVOID ptr2);
NTSTATUS NtFsControlFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext,
PIO_STATUS_BLOCK IoStatusBlock, ULONG FsControlCode, PVOID InputBuffer, ULONG InputBufferLength, PVOID OutputBuffer, ULONG OutputBufferLength);
#ifndef _WIN32
int MultiByteToWideChar(UINT CodePage, DWORD Flags, char* ByteStr, int ByteStrSize, wchar_t* OutStr, int OutStrSize);
#define CP_OEMCP 1
#define MB_PRECOMPOSED 1
PVOID GetModuleHandle(PVOID p1);
BOOL LoadStringW(PVOID module, int resid, WCHAR* str, size_t str_size);
DWORD GetLastError(void);
HMODULE LoadLibraryW(WCHAR* str);
PVOID GetProcAddress(HMODULE, char* name);
#endif
#define CONTAINING_RECORD(addr, type, field) ((type*)( (char*)(addr)-(ULONG_PTR)(&((type*)0)->field)))
#define FILE_ATTRIBUTE_SPARSE_FILE (1)
#define NT_SUCCESS(x) ((x)==STATUS_SUCCESS)
#ifndef min
#define min(x,y) (((x)<(y)) ? (x) : (y))
#endif
#ifndef max
#define max(x,y) (((x)>(y)) ? (x) : (y))
#endif
#include "resource.h"
#include "workqueue.h"