BSOne.SFC/Tocsg.Module/Bs1Flt/bs1flt/bs1flt_util.h

125 lines
3.7 KiB
C

#pragma once
#ifndef _UTIL_H
#define _UTIL_H
enum OS_VERSION
{
WinUndefined = 0,
Win7,
Win8,
WinVista,
WinXP,
Win2k3,
Win2k,
Win10,
Win11
};
// -----------------------------------------------------------------------------
// [구조체 정의] 볼륨의 모든 정보를 담을 통합 구조체
// -----------------------------------------------------------------------------
typedef struct _VOLUME_DETAILS
{
// 1. 기본 식별 정보
WCHAR VolumeLabel[64]; // 볼륨 이름 (예: Windows)
WCHAR FileSystemName[64]; // 파일 시스템 (예: NTFS, FAT32)
ULONG VolumeSerialNumber; // 시리얼 번호
GUID VolumeGuid; // 볼륨 GUID (Win10 이상)
// 2. 용량 정보 (Byte 단위)
LONGLONG TotalBytes; // 전체 크기
LONGLONG FreeBytes; // 사용 가능 크기
// 3. 디바이스 특성
ULONG DeviceType; // 디바이스 타입 (DISK, CDROM 등)
ULONG DeviceCharacteristics; // 특성 (Removable 등)
ULONG FileSystemAttributes; // 속성 (ReadOnly, Compressed 등)
// 4. 섹터 상세 정보 (Win7 이상)
ULONG PhysicalBytesPerSector; // 물리 섹터 크기 (4K 등)
ULONG LogicalBytesPerSector; // 논리 섹터 크기 (512 등)
} VOLUME_DETAILS, * PVOLUME_DETAILS;
#define GetPtr(b, o) ((PVOID)(((ULONG_PTR) b) + ((ULONG_PTR) o)))
#define PROCESS_POOL_TAG 'bs1p'
typedef
NTSTATUS
(*PFN_IoOpenDriverRegistryKey) (
PDRIVER_OBJECT DriverObject,
DRIVER_REGKEY_TYPE RegKeyType,
ACCESS_MASK DesiredAccess,
ULONG Flags,
PHANDLE DriverRegKey
);
PFN_IoOpenDriverRegistryKey
UGetIoOpenDriverRegistryKey(
VOID
);
NTSTATUS UStrNew(PUNICODE_STRING ustr, USHORT bytes);
NTSTATUS UStrFree(PUNICODE_STRING ustr);
NTSTATUS UStrCopy(PUNICODE_STRING dst, PUNICODE_STRING src);
NTSTATUS UStrCat(PUNICODE_STRING ustr, PUNICODE_STRING str);
PVOID UAlloc(SIZE_T size);
VOID UFree(PVOID* buf);
BOOLEAN ISWcstok(WCHAR* pwszSrc, WCHAR* pwszDest, ULONG ulSrcLen, const WCHAR pwszToken, BOOLEAN bNetFlag);
int ISWtoi(const WCHAR* pwszStr);
NTSTATUS UGetCurrentStackProcessImageName(ULONG processId, PUNICODE_STRING ProcessImageName);
ULONG USetProcessNameOffset(void);
BOOLEAN UGetProcessName(PCHAR theName);
NTSTATUS UGetProcessNameFromPid(
_In_ HANDLE pid,
_Out_writes_bytes_(BufferSize) PCHAR Buffer,
_In_ ULONG BufferSize
);
NTSTATUS UGetProcessFullPathFromPid(
_In_ HANDLE pid,
_Out_writes_bytes_opt_(PathBufferSize) PWCHAR PathBuffer, // [옵션] 전체 경로 버퍼
_In_ ULONG PathBufferSize,
_Out_writes_bytes_opt_(NameBufferSize) PWCHAR NameBuffer, // [옵션] 파일명 버퍼
_In_ ULONG NameBufferSize
);
//NTSTATUS
//GetFileName(
// IN PFLT_CALLBACK_DATA Data,
// IN PCFLT_RELATED_OBJECTS FltObjects,
// OUT PUNICODE_STRING FullPathName
//);
ULONG UGetKernelVersion();
typedef BOOLEAN(__stdcall* WalkCallbackFuncT)(PLIST_ENTRY, PVOID, ULONG);
typedef BOOLEAN(__stdcall* WalkCallbackFuncPointT)(PLIST_ENTRY, PVOID, PVOID);
PLIST_ENTRY WalkList(PLIST_ENTRY head, WalkCallbackFuncT fn, PVOID p, ULONG d);
PLIST_ENTRY WalkListPoint(PLIST_ENTRY head, WalkCallbackFuncPointT fn, PVOID p1, PVOID p2);
NTSTATUS UDeleteFile(wchar_t* path);
NTSTATUS UTerminateProcess(ULONG pid);
BOOLEAN UGetDosFilePath(PFLT_VOLUME pVolume, UNICODE_STRING FilePath, PUNICODE_STRING OUT pDosFilePath);
NTSTATUS USetConfiguration(_In_ PDRIVER_OBJECT DriverObject,_In_ PUNICODE_STRING RegistryPath);
PDRIVER_OBJECT SearchDriverObject(WCHAR* name);
DWORD IsExceptionProcess(PPROCESS_MANAGER proccess_manager, ULONG cnt, WCHAR* processname);
BOOLEAN ISIPAddress(PWCHAR pwszPath, const ULONG ulLen);
VOID ISIPAddressToInt(PWCHAR ip_address, const ULONG ulLen, ULONG* pulIP);
void PrintHexData(unsigned char* data, int datalength);
NTSTATUS GetAllVolumeDetails(
_In_ PFLT_INSTANCE Instance,
_Out_ PVOLUME_DETAILS pOutDetails
);
#endif