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로 끝나는 유니코드 문자열이 포함된 버퍼를 가리킵니다. 문자열은 전체 경로 이름이어야 합니다. WDM 필터 및 함수 드라이버는 디바이스 개체의 이름을 지정하지 않습니다. 자세한 내용은 명명된 디바이스 개체를 참조하세요.
중요
디바이스 이름이 제공되지 않은 경우(즉, DeviceName 이 NULL 인 경우) IoCreateDevice 에서 만든 디바이스 개체에는 DACL(임의 액세스 제어 목록)이 연결되지 않습니다(및 연결할 수 없음). 자세한 내용은 보안 설명자를 참조하세요.
[in] DeviceType
디바이스 유형(예: FILE_DEVICE_DISK 또는 FILE_DEVICE_KEYBOARD)을 나타내는 시스템 정의 FILE_DEVICE_ XXX 상수 중 하나 또는 새 유형의 디바이스에 대한 공급업체 정의 값을 지정합니다. 자세한 내용은 디바이스 유형 지정을 참조하세요.
[in] DeviceCharacteristics
드라이버의 디바이스에 대한 추가 정보를 제공하는 하나 이상의 시스템 정의 상수를 함께 ORed로 지정합니다. 가능한 디바이스 특성 목록은 DEVICE_OBJECT 참조하세요. 디바이스 특성을 지정하는 방법에 대한 자세한 내용은 디바이스 특성 지정을 참조하세요. 대부분의 드라이버는 이 매개 변수에 대한 FILE_DEVICE_SECURE_OPEN 지정합니다.
[in] Exclusive
디바이스 개체가 배타적 디바이스를 나타내는지 지정합니다. 대부분의 드라이버는 이 값을 FALSE 로 설정합니다. 배타적 액세스에 대한 자세한 내용은 디바이스 개체에 대한 단독 액세스 지정을 참조하세요.
[out] DeviceObject
새로 만든 DEVICE_OBJECT 구조체에 대한 포인터를 수신하는 변수에 대한 포인터입니다. DEVICE_OBJECT 구조체는 페이지가 없는 풀에서 할당됩니다. 디바이스 개체의 디바이스 확장이 0입니다.
반환 값
IoCreateDevice는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 NTSTATUS 오류 코드를 반환합니다. 이 함수에서 반환하는 오류 코드의 일부 목록에는 다음이 포함됩니다.
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_COLLISION
설명
IoCreateDevice 는 디바이스 개체를 만들고 개체에 대한 포인터를 반환합니다. 호출자는 IoDeleteDevice를 호출하여 더 이상 필요하지 않은 경우 개체를 삭제해야 합니다.
IoCreateDevice 는 이름 없는 디바이스 개체 또는 INF 파일에 의해 보안 설명자가 설정된 명명된 디바이스 개체를 만드는 데만 사용할 수 있습니다. 그렇지 않으면 드라이버는 IoCreateDeviceSecure 를 사용하여 명명된 디바이스 개체를 만들어야 합니다. 자세한 내용은 디바이스 개체 만들기를 참조하세요. 호출자는 반환된 디바이스 개체의 특정 멤버를 설정해야 합니다. 자세한 내용은 디바이스 개체 초기화 및 디바이스 에 대한 디바이스 유형별 설명서를 참조하세요.
올바른 매개 변수에서 DeviceType 및 DeviceCharacteristics 값을 지정해야 합니다. 두 매개 변수 모두 시스템 정의 FILE_ XXX 상수를 사용하고 일부 드라이버 작성기는 실수로 잘못된 매개 변수의 값을 지정합니다.
네트워크 리디렉션자에 대해 명명된 디바이스 개체를 만들고 FsRtlRegisterUncProvider를 사용하여 등록하는 원격 파일 시스템은 IoCreateDevice 의 DeviceCharacteristics 매개 변수에 있는 옵션 중 하나로 FILE_REMOTE_DEVICE 지정해야 합니다.
디스크, 테이프, CD-ROM 및 RAM 디스크에 대한 디바이스 개체에는 볼륨이 디바이스에 탑재된 적이 없음을 나타내기 위해 초기화된 VPB(볼륨 매개 변수 블록)가 제공됩니다.
IoCreateDevice 에 대한 드라이버 호출이 오류를 반환하는 경우 드라이버는 해당 디바이스에 할당된 모든 리소스를 해제해야 합니다.
요구 사항
| 지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
| 대상 플랫폼 | 유니버설 |
| 헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
| 라이브러리 | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | <= APC_LEVEL |
| DDI 규정 준수 규칙 | AddDevice(wdm), CheckDeviceObjectFlags(wdm), HwStorPortProhibitedDDDIs(storport), IrqlIoPassive1(wdm), MiniportOnlyWdmDevice(kmdf) |
참조
피드백
다음에 대한 사용자 의견 제출 및 보기