125 lines
3.7 KiB
C
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 |