デバイスの特性の指定
各デバイス オブジェクトは1 つ以上のデバイス特性を持つことができます。 デバイス特性は、デバイスオブジェクトの DEVICE_OBJECT 構造の Characteristics メンバーにフラグとして格納されます。
ほとんどのドライバーは、FILE_DEVICE_SECURE_OPEN特性のみを指定します。 これにより、デバイスの名前空間へのオープン要求に同じセキュ リティ設定が適用されます。 詳細は、 デバイスの名前空間アクセス制御を参照してください。
FILE_AUTOGENERATED_DEVICE_NAMEは PDO でのみ使用されます。 FILE_FLOPPY_DISKETTE、FILE_REMOVABLE_MEDIA、および FILE_WRITE_ONCE_MEDIAの各特性は、ストレージ デバイスに固有です。 可能なデバイス特性フラグの説明については、 DEVICE_OBJECTの Characteristics メンバーの説明を参照してください。
FILE_AUTOGENERATED_DEVICE_NAMEなど、特定のデバイス特性は、個々のデバイス オブジェクトにのみ適用されます。 ドライバーは、 IoCreateDevice または IoCreateDeviceSecureを呼び出してデバイスオブジェクトを作成するときに、個々のデバイスオブジェクトのデバイス特性の設定を指定できます。
以下の特性は、デバイススタック全体に適用されます:
FILE_DEVICE_SECURE_OPEN
FILE_FLOPPY_DISKETTE
FILE_READ_ONLY_DEVICE
FILE_REMOVABLE_MEDIA
FILE_WRITE_ONCE_MEDIA
ドライバーは、 IoCreateDevice または IoCreateDeviceSecureを呼び出すことで、デバイススタック全体に適用されるデバイス特性を設定できます。 あるいは、デバイススタック全体に適用されるデバイス特性を、デバイスまたはデバイスのセットアップクラスのレジストリに設定することもできます。 (詳細、 レジストリにデバイスオブジェクトの特性を設定するを参照してください。)
PnPマネージャは、デバイス特性のレジストリ設定を次のように決定します。
個々のデバイスに値が指定されている場合、PnP マネージャーはその値を使います。
それ以外の場合は、デバイス セットアップ クラスに値が指定されていれば、PnP マネージャーはその値を使います。
それ以外の場合、PnP マネージャーはレジストリ設定として 0 の値を使います。
デバイス スタック全体に適用されるデバイス特性がレジストリで設定されている場合、またはスタック内の任意の FDO あるいはフィルター DO に設定されている場合、PnP マネージャーはスタック内のすべてのデバイス オブジェクトにそれを設定します。 (デバイスが raw mode 対応であり、したがいFDOがない場合、PnPマネージャは代わりにPDOを使用します。