프로그래밍

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은 File Object의 Flags 필드에 FO_FILE_OPEN_CALCELED Flag를 설정한다. 이 Flag를 설정하게 되면 IRP_MJ_CREATE 요청이 취소 되었으며, IRP_MJ_CLOSE 요청이 이 File Object에 대해 발생 되었다는 것을 의미한다. Create 요청이 취소 된 이후에는 다시 발생하지 않는다. IrpSp->FileObject 파라메터에는 RelatedFileObject 필드에 대한 포인터가 있으며, 이는 FILE_OBJECT 구조체 형식이다. RelatedFileObject 는 이미 열려있는 File Object를 통해서 파일이 열렸음을 나타내는데도 사용 된다. 이것은 일반적으로 Relative File이 디렉토리라는 것을 나타내지만 Stream-Based File은 이미 존재하는 File의 Stream에서 파일이 열릴 수도 있다. FILE_OBJECCT 구조의 RelatedFileObject 필드는 IRP_MJ_CREATE 처리 중에만 유효하다. 

참고사항들을 다 확인 해 보면 좋겠지만, 이 필드에 대해 간단히 요약하자면 FsContext 필드는 IRP_MJ_CREATE가 발생 할 때 File Control Block(FCB) 이나 Stream Control Block(SCB)를 가리키는데 사용 하는 필드라는 것이다. 하지만 이는 위의 내용처럼 파일 시스템이 이 파일을 다룰 때나 해당되는 말이고, 드라이버 개발자들이 CreateFile()을 사용해 Device를 다룰 때에는 이 필드가 FCB를 가리키는 용도로 사용되지 않기 때문에 이 필드는 디스패치 루틴에서 개발자가 마음대로 사용 할 수 있는 필드가 될 수 있다.

'프로그래밍' 카테고리의 다른 글

visual studio 2017 에서 Driver 개발  (0) 2019.02.13
MSB8022  (0) 2019.02.13
IopLoadUnloadDriver  (0) 2014.12.05
NtLoadDriver가 STATUS_PRIVILEGE_NOT_HELD(0xC0000061)를 리턴  (0) 2014.12.05
IoCreateDevice와 IoCreateDeviceSecure  (0) 2014.06.23