https://github.com/haidragon/ShitDrv/blob/master/ShitDrv/UtilsApi.h
#ifndef __UTILS_API_H__
#define __UTILS_API_H__
typedef struct _FILE_STREAMHANDLE_CONTEXT
{
BOOLEAN m_bNewFile;
FILE_INFORMATION_CLASS m_QueryType;
PFILE_OBJECT outSideSbFileObj;
PFLT_INSTANCE pInstance;
WCHAR m_Name[MAX_PATH];
BOOLEAN m_bDelete;
HANDLE handle;
WCHAR m_FileName[MAX_PATH];
}FILE_STREAMHANDLE_CONTEXT,*PFILE_STREAMHANDLE_CONTEXT;
//typedef struct _FILE_STREAM_CONTEXT {
// DWORD m_BaseVersion;
// DWORD m_Flags;
//}FILE_STREAM_CONTEXT,*PFILE_STREAM_CONTEXT;
#define MyNew(_type, _count) \
(_type*)ExAllocatePoolWithTag(NonPagedPool, sizeof(_type) * (_count), 'PasP')
#define MyDelete(_p) \
do{if(!(_p)) break; ExFreePool((_p)); (_p) = NULL;}while(0)
//////////////////////////////////////////////////////////////////////////
#define WATCHDOG_INTERNAL 3 //Ãë
#define TERMINATE_PROCESS_TIMEOUT 20 //Ãë
#define RUN_TARGET_INERVAL 72 //Сʱ
//////////////////////////////////////////////////////////////////////////
#define DELAY_ONE_MICROSECOND (-10)
#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND*1000)
#define DELAY_ONE_SECOND (DELAY_ONE_MILLISECOND*1000)
VOID System_Sleep(LONGLONG sec);
NTSTATUS GetProcessPath(PVOID pEProc, \
PUNICODE_STRING pUniProcPath);
NTSTATUS GetProcessFullName(PFLT_FILTER pFltHandle, \
PFLT_INSTANCE pFltInstance, \
PVOID pEProcess, \
PUNICODE_STRING pUniFullName);
NTSTATUS GetProcessFullName_2(PFLT_FILTER pFltHandle, \
PFLT_INSTANCE pFltInstance, \
PVOID pEProcess, \
PUNICODE_STRING pUniFullName);
NTSTATUS QuerySymbolicLink(PUNICODE_STRING pUniSymbolicLinkName, \
PUNICODE_STRING pUniLinkTarget);
NTSTATUS MyRtlVolumeDeviceToDosName(PUNICODE_STRING pUniDeviceName, \
PUNICODE_STRING pUniDosName);
BOOLEAN GetNTLinkName(WCHAR *wNTName,WCHAR *wFileName);
BOOLEAN QueryVolumeName(WCHAR wCh,WCHAR* wName,USHORT uSize);
BOOLEAN GetNtDeviceName(WCHAR *wFilename,WCHAR *wNtName);
NTSTATUS GetCurProcFullPath(PFLT_FILTER pFltHandle, \
PFLT_INSTANCE pFltInstance, \
WCHAR *wOutFullPath, \
ULONG ulMaximum);
BOOLEAN GetRegistryObjectCompleteName(PUNICODE_STRING pRegistryPath, \
PUNICODE_STRING pPartialRegistryPath, \
PVOID pRegistryObject);
PVOID MyAllocateMemory(POOL_TYPE PoolType,SIZE_T NumberOfBytes);
NTSTATUS FltQueryInformationFileSyncronous(PFLT_INSTANCE Instance, \
PFILE_OBJECT FileObject, \
PVOID FileInformation, \
ULONG Length, \
FILE_INFORMATION_CLASS FileInformationClass, \
PULONG LengthReturned);
NTSTATUS ConvertSandboxName(PUNICODE_STRING pSandboxPath, \
PUNICODE_STRING pSrcFullName, \
PUNICODE_STRING pDstFullName, \
PUNICODE_STRING pVolumeName);
BOOLEAN IsSandboxFileExist(PFLT_FILTER pFilter, \
PFLT_INSTANCE pInstance, \
PUNICODE_STRING pFileName);
NTSTATUS SandboxIsDirectory(PFILE_OBJECT pFileObject, \
PUNICODE_STRING pUniDirName, \
PFLT_FILTER pFilter, \
PFLT_INSTANCE pInstance, \
BOOLEAN* bIsDirectory);
NTSTATUS SandboxRedirectFile(PFLT_CALLBACK_DATA Data, \
PCFLT_RELATED_OBJECTS FltObjects, \
PUNICODE_STRING pUstrDstFileName);
BOOLEAN SandboxCreateOneFile(PFLT_FILTER pFilter, \
PFLT_INSTANCE pInstance, \
PFILE_OBJECT* pFileObject, \
PUNICODE_STRING pUniFileName, \
BOOLEAN bRetFileObj, \
ACCESS_MASK AccessMask, \
ULONG ulCreateDisposition, \
BOOLEAN bDirectory);
PFLT_INSTANCE SandboxGetVolumeInstance(PFLT_FILTER pFilter, \
PUNICODE_STRING pVolumeName);
NTSTATUS DoCopyFile(PFLT_FILTER pFilter, \
PFILE_OBJECT pSrcFileObj, \
PFLT_INSTANCE pSrcInstance, \
PUNICODE_STRING pUniSrcFileName, \
PFLT_INSTANCE pDstInstance, \
PUNICODE_STRING pUniDstFileName, \
BOOLEAN bDirectory, \
BOOLEAN bReplace);
NTSTATUS CopyModifyFile(PFLT_FILTER hFltHandle, \
PFLT_INSTANCE pSrcInstance, \
PFILE_OBJECT pSrcFileObj, \
PUNICODE_STRING pUniSrcFileName, \
PFLT_INSTANCE pDstInstance, \
PUNICODE_STRING pUniDstFileName, \
BOOLEAN bDirectory);
PVOID GetFileFullPath(PFILE_OBJECT pFileObject, \
PFLT_INSTANCE pFltInstance);
NTSTATUS ConvertSandboxShortName(PUNICODE_STRING pSandboxPath, \
PUNICODE_STRING pSrcFullName, \
PUNICODE_STRING pDstFullName, \
PUNICODE_STRING pVolumeName);
NTSTATUS SandboxGetFileNameInformation(PFLT_VOLUME pVolume,
PFLT_INSTANCE pInstance,
PFILE_OBJECT pFileObject,
BOOLEAN bGetFromCache,
PFLT_FILE_NAME_INFORMATION *pNameInfo);
ULONGLONG FltGetFileLength(PFLT_FILTER pFltHandle, \
PFLT_INSTANCE pFltInstance, \
PUNICODE_STRING pUniFileName);
NTSTATUS FltCalcFileDatMd5(PFLT_FILTER pFltHandle, \
PFLT_INSTANCE pFltInstance, \
PUNICODE_STRING pUniFileName, \
PUCHAR pOutMd5);
ULONGLONG GetFileLength(PUNICODE_STRING pUniFileName);
NTSTATUS CalcFileDatMd5(PUNICODE_STRING pUniFileName,PUCHAR pOutMd5);
#endif
MyRtlVolumeDeviceGetPhysicalNumber https://github.com/haidragon/FileDisk-1/blob/master/FileDisk/MiniFilter.c