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 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntifs.h (Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
関連項目
ExAllocatePool2の
ExAllocatePool3の
IoGetAttachedDeviceの
IoGetAttachedDeviceReferenceの
IoGetLowerDeviceObjectの
ObDereferenceObjectの