개발/Win32
FltRegisterFilter 함수
참고 자료 : https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/fltkernel/nf-fltkernel-fltregisterfilter?redirectedfrom=MSDN FltRegisterFilter function (fltkernel.h) - Windows drivers FltRegisterFilter registers a minifilter driver. docs.microsoft.com 함수 기능 : 미니 필터 드라이버를 등록한다 NTSTATUS FLTAPI FltRegisterFilter( PDRIVER_OBJECT Driver, const FLT_REGISTRATION *Registration, PFLT_FILTER *RetFil..
GetQueuedCompletionStatus 함수
BOOL WINAPI GetQueuedCompletionStatus (_In_ HANDLE CompletionPort,_Out_ LPDWROD lpNumberOfBytes,_Out_ PULONG_PTR lpCompletionKey,_Out_ LPOVERLAPPED *lpOverlapped,_In_ DWORD dwMilliseconds); MSDN 에서 보면, 지정된 I/O 완료 포트에서 I/O 완료 패킷을 큐에서 제거하려고 시도합니다.큐에 완료 패킷이 없는이 없는 경우 함수는 완료 포트와 관련된 보류중인 입출력 조작이 완료되기를 기다립니다. CompletionPort : 완료포트의 핸들 .완료 포트를 만들려면 CreateIOCompletionPort 함수를 사용하세요. lpNumberOfByte : 입출..
GetProcessMemoryInfo 함수
BOOL WINAPI GetProcessMemoryInfo (_In_ HANDLE hProcess,_Out_ PPROCESS_MEMORY_COUNTERS ppsmemCounters,_In_ DWORD cb); hProcess : 프로세스에 대한 핸들, 이 때 주로 OpenProcess를 통해서 핸들을 통할텐데,dwDesiredAccess에 인자를 PROCESS_QUERY_INFORMATION 또는 PROCESS_QUERY_LIMITED_INFORMATION 액세스 권한을 줘야한다. ppsmemCounter : 프로세스의 메모리 사용에 대한 정보를 받는 PROCESS_MEMORY_COUNTERS 또는 PROCESS_MEMORY_COUNTERS_EX 구조체에 대한 포인터 cb : ppsmemCounters ..
PROCESS_MEMORY_COUNTERS_EX 구조체
typedef struct _PROCESS_MEMORY_COUNTERS_EX { DWORD cb; DWORD PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; SIZE_T QuotaPagedPoolUsage; SIZE_T QuotaPeakNonPagedPoolUsage; SIZE_T QuotaNonPagedPoolUsage; SIZE_T PagefileUsage; SIZE_T PeakPagefileUsage; SIZE_T PrivateUsage; } PROCESS_MEMORY_COUNTERS_EX, *PPROCESS_MEMORY_COUNTERS_EX; MSDN에 보면 이렇게 나와있..
QueryFullProcessImageName 함수
BOOL WINAPI QueryFullProcessImageName (_HANDLE hProcess,_In_ DWORD dwFlags,_Out_ LPTSTR lpExeName,_InOut_ PDWORD lpdwSize); hProcess : 프로세스에 대한 핸들, 이 때 주로 OpenProcess를 통해서 핸들을 통할텐데,dwDesiredAccess에 인자를 PROCESS_QUERY_INFORMATION 또는 PROCESS_QUERY_LIMITED_INFORMATION 액세스 권한을 줘야한다.일반적으로 PROCESS_ALL_ACCESS 를 줬지만, QueryFullProcessImageName 함수를 사용한다. dwFlags : 0을 주면, Win32 경로 형식을 사용 PROCESS_NAME_NATIVE..
OpenProcess 함수
OpenProcess 함수 HANDLE WINAPI OpenProcess(_In_ DWORD dwDesiredAccess,_In_ BOOL bInheritHandle,_In_ DWORD dwProcessId,); MSDN에서 보면, dwDesiredAccess : 어떻게 접근할 것인가 정하는 옵션인데,주로 PROCESS_ALL_ACCESS 로 사용하여 모든권한을 가질 수 있었다. bInheritaHandle : PID로 접근한 object를 현재 이 함수를 실행하고있는 프로세스에 상속할지 결정하는 인자 dwProcessId : 접근할 목표 Process의 PID 0 or NULL 을 입력하면 모든 Process에 대해 접근한다. 필요 Header 는 WinBase.h 윈도우 8은 Processthread..
ZeroMemory 와 memset
ZeroMemory 와 memset 을 자주 본다. void ZeroMemory{PVOID Destination, SIZE_T Length}; Destination : 0 으로 채울 메모리 블럭의 시작 주소를 가리키는 포인터Length : 0으로 채울 크기 Header : WinBase.h (include Windows.h) WINBASE.H 를 보면,#define ZeroMemory RtlZeroMemory WINNT.H 를 보면 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length) 근본적으로보면 ZeroMemory는 memset을 사용하고 있다고 볼 수 있지 않을까 생각이 든다. void *memset(void * dest..