728x90
반응형
유저모드 프로그램에서 파일을 읽을 때에는 CreateFile API를 통해 파일을 열고 ReadFile함수 이용하여 파일을 읽습니다. 드라이버 개발을 할 때에도 간혹 파일 처리를 해야할 때가 있는데 이때 사용 가능한 커널모드 함수로는 Zw계열 함수인 ZwOpenFile, ZwReadFile입니다.
다음 코드는 ZwOpenFile, ZwReadFile 의 예시입니다.
void FileRead()
{
NTSTATUS status = STATUS_SUCCESS;
HANDLE hFile = NULL;
IO_STATUS_BLOCK iostatus;
OBJECT_ATTRIBUTES oa;
LARGE_INTEGER byteOffset;
UNICODE_STRING uFilename;
unsigned char buf[100] = { 0, };
RtlInitUnicodeString(&uFilename, L"\\??\\c:\\file.txt");
InitializeObjectAttributes(
&oa,
&uFilename,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL);
status = ZwOpenFile(&hFile,
GENERIC_READ | SYNCHRONIZE,
&oa,
&iostatus,
FILE_SHARE_READ,
FILE_NON_DIRECTORY_FILE
);
if (!NT_SUCCESS(status))
{
KdPrint(("ZwOpenFile error %x\n", status));
goto EXIT;
}
status = ZwReadFile(hFile, NULL, NULL, NULL, &iostatus,
buf, 100, &byteOffset, NULL);
EXIT:
if(hFile)
ZwClose(hFile);
}
docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-zwopenfile
728x90
반응형
'개발 > Windows' 카테고리의 다른 글
[Win32] WM_ERASEBKGND에서 리턴 값의 의미? (0) | 2022.02.24 |
---|---|
C++/WinRT의 필요성 - 노트북 배터리 정보 구하기 (0) | 2021.11.18 |
Windbg 커널디버깅 설정하기 (Network 디버깅) (0) | 2020.07.27 |
UNICODE_STRING 동적할당 하기 / 드라이버개발 (0) | 2020.07.24 |
Windows 드라이버 커널모드에서 파일 해시 구하기 (0) | 2020.07.23 |
댓글