IoCreateDevice 関数 (wdm.h)
IoCreateDevice ルーチンは、ドライバーで使用するデバイス オブジェクトを作成します。
構文
NTSTATUS IoCreateDevice(
[in] PDRIVER_OBJECT DriverObject,
[in] ULONG DeviceExtensionSize,
[in, optional] PUNICODE_STRING DeviceName,
[in] DEVICE_TYPE DeviceType,
[in] ULONG DeviceCharacteristics,
[in] BOOLEAN Exclusive,
[out] PDEVICE_OBJECT *DeviceObject
);
パラメーター
[in] DriverObject
呼び出し元のドライバー オブジェクトへのポインター。 各ドライバーは、DriverEntry ルーチンへのパラメーター内のドライバー オブジェクトへのポインターを受け取ります。 WDM 関数およびフィルター ドライバーは、AddDevice ルーチンでドライバー オブジェクト ポインターも受け取ります。
[in] DeviceExtensionSize
デバイス オブジェクトの デバイス拡張機能の に割り当てるドライバーによって決定されたバイト数を指定します。 デバイス拡張機能の内部構造はドライバー定義です。
[in, optional] DeviceName
必要に応じて、デバイス オブジェクトの名前を指定する null で終わる Unicode 文字列を含むバッファーを指します。 文字列は完全なパス名である必要があります。 WDM フィルタードライバーと関数ドライバーは、デバイス オブジェクトの名前を付けないでください。 詳細については、「名前付きデバイス オブジェクトの
デバイス名が指定されていない場合 (つまり、DeviceName が NULL
[in] DeviceType
デバイスの種類 (FILE_DEVICE_DISKやFILE_DEVICE_KEYBOARDなど) を示すシステム定義FILE_DEVICE_XXX 定数、または新しい種類のデバイスのベンダー定義値のいずれかを指定します。 詳細については、「デバイスの種類の指定」を参照してください。
[in] DeviceCharacteristics
ドライバーのデバイスに関する追加情報を提供する 1 つ以上のシステム定義定数 ORed を指定します。 使用可能なデバイス特性の一覧については、DEVICE_OBJECTを参照してください。 デバイス特性を指定する方法の詳細については、「デバイス特性の指定」を参照してください。 ほとんどのドライバーは、このパラメーターのFILE_DEVICE_SECURE_OPENを指定します。
[in] Exclusive
デバイス オブジェクトが 排他デバイスを表すかどうかを指定します。 ほとんどのドライバーは、この値を FALSE
[out] DeviceObject
新しく作成された DEVICE_OBJECT 構造体へのポインターを受け取る変数へのポインター。 DEVICE_OBJECT 構造体は、非ページ プールから割り当てられます。 デバイス オブジェクトのデバイス拡張がゼロになります。
戻り値
IoCreateDevice は、成功するとSTATUS_SUCCESS、または失敗した場合は適切な NTSTATUS エラー コードを返します。 この関数によって返されるエラー コードの一部の一覧には、次のものが含まれます。
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_COLLISION
備考
IoCreateDevice はデバイス オブジェクトを作成し、オブジェクトへのポインターを返します。 呼び出し元は、IoDeleteDevice
IoCreateDevice は、名前のないデバイス オブジェクト、または INF ファイルによってセキュリティ記述子が設定されている名前付きデバイス オブジェクトの作成にのみ使用できます。 それ以外の場合、ドライバー IoCreateDeviceSecure を使用して名前付きデバイス オブジェクトを作成する必要があります。 詳細については、「デバイス オブジェクトの作成」を参照してください。 呼び出し元は、返されたデバイス オブジェクトの特定のメンバーを設定する必要があります。 詳細については、「デバイス オブジェクト の初期化」およびデバイスのデバイスの種類固有のドキュメントを参照してください。
DeviceType と DeviceCharacteristics 値を正しいパラメーターで指定するように注意してください。 どちらのパラメーターもシステム定義FILE_XXX 定数を使用し、一部のドライバー ライターは間違ったパラメーターの値を誤って指定します。
ネットワーク リダイレクターの名前付きデバイス オブジェクトを作成し、FsRtlRegisterUncProviderを使用して登録するリモート ファイル システムでは、IoCreateDevice の DeviceCharacteristics パラメーターのオプションの 1 つとしてFILE_REMOTE_DEVICEを指定する必要があります。
ディスク、テープ、CD-ROM、および RAM ディスクのデバイス オブジェクトには、ボリュームがデバイスにマウントされていないことを示すために初期化されたボリューム パラメーター ブロック (VPB) が与えられます。
IoCreateDevice に対するドライバーの呼び出しでエラーが返された場合、ドライバーはそのデバイスに割り当てられたリソースを解放する必要があります。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の |
万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
DDI コンプライアンス規則 を |
AddDevice(wdm)、 CheckDeviceObjectFlags(wdm)、 HwStorPortProhibitedDDDIs (storport), IrqlIoPassive1(wdm), MiniportOnlyWdmDevice(kmdf) |
関連項目
IoAttachDevice の
IoAttachDeviceToDeviceStack の
IoCreateDeviceSecure の
IoDeleteDevice の