본문 바로가기
개발/Windows

드라이버에서 파일 읽기 예제/ ZwOpenFile ,ZwReadFile

by lucidmaj7 2020. 11. 12.
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

 

ZwOpenFile function (wdm.h) - Windows drivers

The ZwOpenFile routine opens an existing file, directory, device, or volume.

docs.microsoft.com

 

728x90
반응형

댓글