다음을 통해 공유


IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL(ehstorioctl.h)

이 IOCTL은 지정된 ACT(Addressable Command Target)와 연결된 모든 활성 스토리지 PDO(물리적 디바이스 개체)의 열거형을 포함하는 결과 집합을 반환합니다. 클라이언트는 먼저 다음과 같은 방식으로 이 IOCTL을 실행하여 필요한 버퍼 크기를 검색할 수 있습니다.

DeviceIoControl(
    hDevice,
    IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
    &pdoType,
    sizeof(PDO_TYPE),
    NULL,
    0,
    &dwBytesRequired,
    NULL );

출력 버퍼 매개 변수를 NULL로 설정하면 I/O 관리자가 IRP 플래그의 IRP_INPUT_OPERATION 비트를 지웁니다. 이를 감지하면 스토리지 사일로 드라이버는 IoStatus.Information를 필요한 버퍼 크기로 안전하게 설정하여 클라이언트에 표시할 수 있습니다.

STATUS_BUFFER_OVERFLOW(0x80000005)는 I/O 관리자가 IoStatus.Information를 lpBytesReturned 매개 변수에 복사하여 해당 값을 클라이언트에 반환하는 NT_WARNING() 값이기 때문에 작동합니다.

IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS METHOD_BUFFERED 사용하여 정의되므로 여기서는 주의해야 합니다. 따라서 I/O 관리자는 이 바이트 수를 출력 버퍼에 복사하려고 시도합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

Irp-AssociatedIrp.SystemBuffer>의 입력 버퍼에는 PDO_TYPE 정의된 ULONG 값이 포함되어야 합니다.

여기서 모든 PDO, 디스크 PDO, 컨트롤 PDO 또는 모든 사일로 PDO만 제공된 PDO_TYPE 입력 값에 따라 각각 열거됩니다.

입력 버퍼 길이

ULONG의 길이입니다.

출력 버퍼

Irp-AssociatedIrp.SystemBuffer>는 PDO 열거 결과를 받을 버퍼를 가리킵니다. 클라이언트가 발급된 IOCTL을 사용하여 NULL 이 아닌 버퍼를 제공한 경우 드라이버는 Parameters.DeviceIoControl.반환 STATUS_SUCCESS 값이 버퍼 크기가 충분하고 결과가 버퍼에 복사된 경우에만 결과 집합으로 채웁니다. 그렇지 않으면 STATUS_INVALID_BUFFER_SIZE 반환되고 출력 버퍼는 수정되지 않습니다.

반환된 열거형 버퍼에는 다음 규칙에 따라 구조화된 결과 집합이 포함됩니다. 버퍼의 선행 구조체인 ENUM_PDO_RESULTS 구조체 수와 ENUM_PDO_ENTRY 구조체의 배열로 구성됩니다.

출력 버퍼 길이

OutputBufferLength는 전체 결과 집합을 포함하기에 충분한 길이의 버퍼 크기를 나타냅니다.

상태 블록

상태 필드에 다음 값 중 하나가 반환될 수 있습니다.

STATUS_SUCCESS - 출력 버퍼에는 요청된 PDO의 열거형이 포함됩니다.
STATUS_BUFFER_OVERFLOW - 정보 필드는 전체 열거형 결과 집합 출력을 포함하는 데 필요한 버퍼 크기로 설정됩니다.
STATUS_INVALID_BUFFER_SIZE - 제공된 출력 버퍼 길이가 전체 열거형 결과 집합 출력을 포함하기에 충분하지 않습니다.

요구 사항

요구 사항
헤더 ehstorioctl.h(EhStorIoctl.h 포함)