많은 드라이버, 특히 계층화된 드라이버 체인의 하위 수준 드라이버는 만들기 요청을 수신할 때 자신의 존재를 확립하기만 하면 되며 가까운 요청의 수신을 승인하기만 하면됩니다.
예를 들어 IoGetDeviceObjectPointer 를 호출하는 하나 이상의 밀접하게 결합된 클래스 드라이버가 있는 디바이스 컨트롤러의 포트 드라이버는 DispatchCreateClose 루틴을 최소화할 수 있습니다. 루틴은 다음과 같이 IRP를 완료하는 것 이상의 작업을 수행할 수 있습니다.
: :
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
이 최소 DispatchCreateClose 루틴은 I/O 상태 블록의 정보 멤버를 0으로 설정하여 만들기 요청에 대해 파일 개체가 열려 있음을 나타냅니다. 정보는 가까운 요청에 아무런 의미가 없습니다. 루틴은 Status 멤버를 STATUS_SUCCESS 설정하고 드라이버가 I/O 요청을 수락할 준비가 되었음을 나타내는 이 상태 값을 반환합니다.
이 최소 DispatchCreateClose 루틴은 IRP(IO_NO_INCREMENT)의 시작자의 우선 순위를 높이지 않고 IRP 만들기를 완료합니다. 이는 생성자가 요청이 완료되기까지 확정되지 않았지만 매우 작은 간격을 기다리는 것으로 간주되기 때문입니다.
DispatchCreateClose 루틴이 수행하는 작업량은 부분적으로 드라이버 디바이스 또는 기본 디바이스의 특성과 드라이버 디자인에 따라 달라집니다. 드라이버가 요청을 만들고 닫기 위해 매우 다른 작업을 수행하는 경우 별도의 DispatchCreate 및 DispatchClose 루틴에서 이러한 요청을 처리해야 합니다.
논리 또는 물리적 디바이스를 나타내는 파일 개체를 여는 만들기 요청을 처리하려면 최상위 드라이버에서 다음을 수행해야 합니다.
IoGetCurrentIrpStackLocation을 호출하여 IRP의 I/O 스택 위치에 대한 포인터를 가져옵니다.
FileObject를 확인합니다. I/O 스택 위치의 FileName 및 FileName의 유니코드 문자열 길이가 0인 경우 STATUS_SUCCESS IRP를 완료합니다. 그렇지 않으면 STATUS_INVALID_PARAMETER 사용하여 IRP를 완료합니다.
이전 단계를 수행하면 디바이스에서 pseudofile을 열려고 시도하지 않을 경우 나중에 문제가 발생할 수 있습니다. 예를 들어 존재하지 않는 \\device\parallel0\temp.dat를 열려는 시도를 방지합니다.