다음을 통해 공유


IoGetDeviceObjectPointer 함수(wdm.h)

IoGetDeviceObjectPointer 루틴은 명명된 디바이스 개체 스택의 맨 위 개체에 대한 포인터와 개체에 대한 요청된 액세스 권한을 부여할 수 있는 경우 해당 파일 개체에 대한 포인터를 반환합니다.

통사론

NTSTATUS IoGetDeviceObjectPointer(
  [in]  PUNICODE_STRING ObjectName,
  [in]  ACCESS_MASK     DesiredAccess,
  [out] PFILE_OBJECT    *FileObject,
  [out] PDEVICE_OBJECT  *DeviceObject
);

매개 변수

[in] ObjectName

디바이스 개체의 이름인 유니코드 문자열이 포함된 버퍼에 대한 포인터입니다.

[in] DesiredAccess

원하는 액세스를 나타내는 ACCESS_MASK 값을 지정합니다. 일반적으로 desiredAccess FILE_READ_DATA. FILE_WRITE_DATA 또는 FILE_ALL_ACCESS 액세스 권한이 자주 지정되지 않습니다.

[out] FileObject

호출에 성공한 경우 사용자 모드 코드에 해당하는 디바이스 개체를 나타내는 파일 개체에 대한 포인터입니다.

[out] DeviceObject

호출에 성공한 경우 명명된 논리, 가상 또는 물리적 디바이스를 나타내는 디바이스 개체에 대한 포인터입니다.

반환 값

IoGetDeviceObjectPointer 성공하면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.

STATUS_OBJECT_TYPE_MISMATCH

STATUS_INVALID_PARAMETER

STATUS_PRIVILEGE_NOT_HELD

STATUS_INSUFFICIENT_RESOURCES

STATUS_OBJECT_NAME_INVALID

발언

IoGetDeviceObjectPointer 호출자와 다음 하위 수준 드라이버 간에 "연결"을 설정합니다. 성공한 호출자는 반환된 디바이스 개체 포인터를 사용하여 자체 디바이스 개체를 초기화할 수 있습니다. IoAttachDeviceToDeviceStack , IoCallDriver및 낮은 드라이버에 대한 IRP를 만드는 루틴을인수로 사용할 수도 있습니다. 반환된 포인터는 IoCallDriver 데 필요한 인수입니다.

이 루틴은 해당 파일 개체에 대한 포인터도 반환합니다. 언로드할 때 드라이버는 디바이스 개체를 간접적으로 역참조하는 수단으로 파일 개체를 역참조할 수 있습니다. 이렇게 하려면 드라이버는 언로드 루틴에서 ObDereferenceObject 호출하여 IoGetDeviceObjectPointer반환된 파일 개체 포인터를 전달합니다. 드라이버의 언로드 루틴에서 디바이스 개체를 역참조하지 않으면 다음 하위 드라이버가 언로드되지 않습니다. 그러나 언로드 프로세스 전에 파일 개체를 닫는 드라이버는 파일 개체를 역참조하기 전에 디바이스 개체에 대한 추가 참조를 제거해야 합니다. 그렇지 않으면 파일 개체를 역참조하면 디바이스 개체가 조기에 삭제됩니다.

파일 시스템 드라이버 스택에서 가장 높은 수준의 드라이버에 대한 포인터를 얻으려면 드라이버가 파일 시스템이 탑재되었는지 확인해야 합니다. 그렇지 않으면 이 루틴은 스토리지 디바이스 스택을 트래버스합니다. 파일 시스템이 스토리지 디바이스에 탑재되도록 하려면 드라이버는 DesiredAccess 매개 변수에 FILE_READ_DATA 또는 FILE_WRITE_ATTRIBUTES 같은 적절한 액세스 마스크를 지정해야 합니다. FILE_READ_ATTRIBUTES 지정해도 파일 시스템이 탑재되지 않습니다.

상위 수준 드라이버가 이 루틴을 성공적으로 호출하여 다른 드라이버에 연결한 후 상위 수준 드라이버는 디바이스 개체의 StackSize 필드를 다음 하위 수준 드라이버의 디바이스 개체에 1을 더한 값으로 설정해야 합니다.

IoGetDeviceObjectPointer 호출자는 IRQL = PASSIVE_LEVEL 실행되어야 합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 보편적
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm)

참고 항목

ACCESS_MASK

DEVICE_OBJECT

IoAllocateIrp

IoAttachDevice

IoAttachDeviceToDeviceStack

IoCallDriver

ObDereferenceObject

ObReferenceObjectByPointer