次の方法で共有


IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG IOCTL (ntddstor.h)

ドライバーは、IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG を使用して、デバイスから内部状態データを取得できます。

メジャー コード

IRP_MJ_INTERNAL_DEVICE_CONTROL

入力バッファー

照会するデータの種類を識別する GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST 構造体。

入力バッファーの長さ

Parameters.DeviceIoControl.InputBufferLength は、Irp- >AssociatedIrp.SystemBufferのパラメーター バッファーのサイズ (バイト単位) を示します。これは、>= sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST)である必要があります。

出力バッファー

ドライバーは、Irp->AssociatedIrp.SystemBuffer バッファーに出力を返します。 このバッファーには、デバイスの内部状態を持つ DEVICE_INTERNAL_STATUS_DATA 構造体が含まれています。

出力バッファーの長さ

I/O スタックの場所で Parameters.DeviceIoControl.OutputBufferLength すると、パラメーター バッファーのサイズがバイト単位で示されます。これは、>= sizeof(DEVICE_INTERNAL_STATUS_DATA)である必要があります。

入力/出力バッファー

n/a

入力/出力バッファーの長さ

n/a

状態ブロック

Irp->IoStatus.Status は、要求が成功した場合にSTATUS_SUCCESSに設定されます。 それ以外の場合、状態は NTSTATUS コードとして適切なエラー条件に設定されます。 詳細については、「NTSTATUS 値 を参照してください。

備考

IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOGは、任意のストレージ デバイスからホストによって開始されたデバイステレメトリ ログを返します。 次の擬似コードは、テレメトリ データ ヘッダーを要求する方法を示しています。

// Allocate a GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST structure, then
// initialize it with a data header request:
//   request.Version = sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST);
//   request.Size = sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST);
//   request.RequestDataType = DeviceCurrentInternalStatusDataHeader;

// Allocate a DEVICE_INTERNAL_STATUS_DATA structure in which
// to return the header data, with outputBufferLength set to
// (sizeof(DEVICE_INTERNAL_STATUS_DATA) + 512).

// Get the device internal status data.
BOOL result = TRUE;
ULONG returnedLength = 0;
result = DeviceIoControl(deviceHandle,
            IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG,
            &request,
            sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST),
            &outputBuffer,
            outputBufferLength,
            &returnedLength,
            NULL);

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 2004
ヘッダー ntddstor.h

関連項目

DEVICE_INTERNAL_STATUS_DATA

GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST