전체 글

    IrpSp->FileObject

    https://msdn.microsoft.com/ko-kr/library/windows/hardware/ff548630(v=vs.85).aspx irpsp->fileobject은 I/O Manager가 Create 또는 Open 하는 대상 파일을 가리키기 위한 File Object 형식의 포인터다. File System이 IRP_MJ_CREATE 요청을 처리 할 때, 이 File Object의 FsContext와 FsContext2 필드에는 File System 고유의 값이 셋팅 된다. 따라서 FsContext와 FsContext2 필드의 값들은 File System이 Create 요청을 처리하기 전 까지는 유효하다고 볼 수가 없다. FltCancelFileOpen과 IoCancelFileOpen은 Fi..

    IopLoadUnloadDriver

    VOID NTAPI IopLoadUnloadDriver(PLOAD_UNLOAD_PARAMS LoadParams) { RTL_QUERY_REGISTRY_TABLE QueryTable[3]; UNICODE_STRING ImagePath; UNICODE_STRING ServiceName; NTSTATUS Status; ULONG Type; PDEVICE_NODE DeviceNode; PDRIVER_OBJECT DriverObject; PLDR_DATA_TABLE_ENTRY ModuleObject; PVOID BaseAddress; WCHAR *cur; // 언로드 요청인지 아닌지 검사한다. if (LoadParams->DriverObject) { // 드라이버 로드/언로드에 관련된 파라미터안에 드라이버 객체가..

    NtLoadDriver가 STATUS_PRIVILEGE_NOT_HELD(0xC0000061)를 리턴

    NtLoadDriver()를 사용해서 드라이버를 로드하려고 하는데, 레지스트리 키도 정상적으로 생성했고, 모든 값이 정상적인데도 불구하고 0xC0000061(Privilege not held) 값을 리턴하는 경우에는 권한 문제일 수 있다. 관리자 모드라고 할지라도 몇 Privileges는 기본적으로 Disable일 경우가 있는데 이러한 권한들이 필요한 작업을 하기 위해서는 작업을 수행하기 전에 확실하게 Enable 값으로 설정이 해야한다. NtLoadDriver 같은 경우에는 드라이버를 로드 할 수 있는 권한(SeLoadDriverPrivilege)가 필요하다. 이는 AdjustTokenPrivileges() 함수를 사용해 이 권한을 Enable 시킬 수 있다. 함수의 자세한 사항은 MSDN을 참고하는 ..