IoEnumerateDeviceObjectList 関数 (ntifs.h)
IoEnumerateDeviceObjectList ルーチンは、ドライバーのデバイス オブジェクトリストを列挙します。
構文
NTSTATUS IoEnumerateDeviceObjectList(
[in] PDRIVER_OBJECT DriverObject,
[out] PDEVICE_OBJECT *DeviceObjectList,
[in] ULONG DeviceObjectListSize,
[out] PULONG ActualNumberDeviceObjects
);
パラメーター
[in] DriverObject
ドライバーのドライバー オブジェクトへのポインター。
[out] DeviceObjectList
デバイス オブジェクト ポインターを受け取る呼び出し元によって割り当てられた配列へのポインター。 この配列は、非ページ プールから割り当てる必要があります。 このパラメーターは、NULL でもかまいません。 「解説」を参照してください。
[in] DeviceObjectListSize
DeviceObjectList 配列のサイズ (バイト単位)。 このパラメーターには 0 を指定できます。 「解説」を参照してください。
[out] ActualNumberDeviceObjects
ドライバー オブジェクトのデバイス オブジェクトの一覧で見つかったデバイス オブジェクトの実際の数。 DeviceObjectList の配列が小さすぎる場合、配列にコピーされるデバイス オブジェクト ポインターの数は ActualNumberDeviceObjects より小さくなります。
戻り値
IoEnumerateDeviceObjectList は、次のいずれかの値などの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | IoEnumerateDeviceObjectList の呼び出しが正常に完了しました。 |
STATUS_BUFFER_TOO_SMALL | DeviceObjectList の配列が小さすぎて、デバイス オブジェクト リスト全体を保持できません。 この場合、 IoEnumerateDeviceObjectList は、可能な限り多くのデバイス オブジェクト ポインターを配列にコピーします。 |
注釈
ファイル システム フィルター ドライバーは 、IoEnumerateDeviceObjectList を呼び出して次を列挙します。
作成したデバイス オブジェクト。 これは通常、ドライバーがアンロードの準備をしているときに行われます。 フィルター ドライバーは、実行中のシステムから安全にアンロードできないことに注意してください。 詳細については、「 ZwUnloadDriver」を参照してください。
基本ファイル システムによって作成されたデバイス オブジェクト。そのため、フィルターはアタッチできるボリュームの数を認識します。
IoEnumerateDeviceObjectList は、フィルター ドライバーによって作成されたすべてのデバイス オブジェクトを返します。 これには、コントロール デバイス オブジェクト (CTO) とボリューム デバイス オブジェクト (VTO) が含まれます。 2 種類のデバイス オブジェクトは、規則によって、CTO に名前が付けられ、VTO が名前付けされないという事実によって区別できます。
後者の場合、フィルター ドライバーは通常 、IoEnumerateDeviceObjectList を 2 回呼び出します。1 回はリスト内のデバイス オブジェクトの数を取得し、1 回はデバイス オブジェクト リスト自体を取得します。 最初の呼び出しでは、呼び出し元は DeviceObjectList パラメーターを NULL に、 DeviceObjectListSize を 0 に設定する必要があります。 2 番目の呼び出しでは、 DeviceObjectList に適切なサイズのポインター配列へのポインターが含まれている必要があり、 DeviceObjectListSize にはその配列のサイズ (バイト単位) が含まれている必要があります。
IoEnumerateDeviceObjectList は、 DeviceObjectList が指すリスト内のすべてのデバイス オブジェクトの参照カウントをインクリメントします。 したがって、 IoEnumerateDeviceObjectList の呼び出しが成功するたびに、一覧内の各デバイス オブジェクトに対する ObDereferenceObject の後続の呼び出しと一致する必要があります。 これを行わないと、未処理の参照カウントが原因で、システムがこれらのデバイス オブジェクトを解放または削除できなくなります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 SP4 更新プログラムのロールアップ。Windows XP |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |