다음을 통해 공유


WdmlibIoCreateDeviceSecure 함수(wdmsec.h)

WdmlibIoCreateDeviceSecure 함수(또는 IoCreateDeviceSecure)는 명명된 디바이스 개체를 만들고 지정된 보안 설정을 적용합니다.

구문

NTSTATUS WdmlibIoCreateDeviceSecure(
  [in]           PDRIVER_OBJECT   DriverObject,
  [in]           ULONG            DeviceExtensionSize,
  [in, optional] PUNICODE_STRING  DeviceName,
  [in]           DEVICE_TYPE      DeviceType,
  [in]           ULONG            DeviceCharacteristics,
  [in]           BOOLEAN          Exclusive,
  [in]           PCUNICODE_STRING DefaultSDDLString,
  [in, optional] LPCGUID          DeviceClassGuid,
                 PDEVICE_OBJECT   *DeviceObject
);

매개 변수

[in] DriverObject

호출자의 드라이버 개체에 대한 포인터입니다. 각 드라이버는 DriverEntry 루틴에 대한 매개 변수에서 드라이버 개체에 대한 포인터를 받습니다. WDM 함수 및 필터 드라이버도 AddDevice 루틴에서 드라이버 개체 포인터를 받습니다.

[in] DeviceExtensionSize

디바이스 개체의 디바이스 확장 에 할당할 드라이버 결정 바이트 수를 지정합니다. 디바이스 확장의 내부 구조는 드라이버 정의입니다.

[in, optional] DeviceName

필요에 따라 디바이스 개체의 이름을 지정하는 null로 끝나는 유니코드 문자열이 포함된 버퍼를 가리킵니다. 문자열은 전체 경로 이름이어야 합니다. 이름이 제공되지 않으면 deviceCharacteristics 매개 변수에 FILE_AUTOGENERATED_DEVICE_NAME 플래그가 있어야 합니다. 이름 없는 디바이스 개체를 만들려면 IoCreateDevice 루틴을 사용합니다.

[in] DeviceType

디바이스 유형(예: FILE_DEVICE_DISK, FILE_DEVICE_KEYBOARD 등)을 나타내는 시스템 정의 FILE_DEVICE_XXX 상수 또는 새 유형의 디바이스에 대한 공급업체 정의 값을 지정합니다. 자세한 내용은 디바이스 유형 지정을 참조하세요. 버스 드라이버에 디바이스 유형에 대한 정보가 없을 수 있으므로 INF AddReg 지시문에서 PDO에 대한 디바이스 유형 값을 지정할 수 있습니다.

[in] DeviceCharacteristics

드라이버의 디바이스에 대한 추가 정보를 제공하는 하나 이상의 시스템 정의 상수 ORed를 함께 지정합니다. 가능한 디바이스 특성 목록은 DEVICE_OBJECT 참조하세요. 디바이스 특성을 지정하는 방법에 대한 자세한 내용은 디바이스 특성 지정을 참조하세요. 대부분의 드라이버는 이 매개 변수에 대한 FILE_DEVICE_SECURE_OPEN 지정합니다.

[in] Exclusive

디바이스 개체가 배타적 디바이스를 나타내는지 지정합니다. 대부분의 드라이버는 이 값을 FALSE로 설정합니다. 자세한 내용은 디바이스 개체에 대한 단독 액세스 지정을 참조하세요.

[in] DefaultSDDLString

디바이스 개체의 기본 보안 설정에 대한 문자열 표현을 지정합니다. 디바이스 개체에 적용되는 보안은 시스템 관리자가 DeviceClassGuid 매개 변수로 식별된 레지스트리의 섹션에 재정의를 배치하지 않는 한 이 문자열에서 파생됩니다.

보안 설정은 SDDL(보안 설명자 정의 언어)의 하위 집합에 지정됩니다. 미리 정의된 상수 집합(SDDL_DEVOBJ_XXX)도 제공됩니다. 자세한 내용은 디바이스 개체 보안을 참조하세요.

[in, optional] DeviceClassGuid

DefaultSDDLString, DeviceType, DeviceCharacteristics 및 Exclusive 매개 변수에 대한 가능한 재정의가 포함된 레지스트리의 섹션을 식별하는 GUID에 대한 포인터입니다.

참고 항상 사용자 지정 클래스 GUID를 지정해야 합니다. 기존 클래스 GUID를 지정하면 안 됩니다. 기존 클래스 GUID를 지정하는 경우 기존 클래스 GUID를 지정하려는 다른 드라이버가 설치에 실패하거나 잘못된 보안 설정으로 설치될 수 있습니다.
 

DeviceObject

새로 만든 DEVICE_OBJECT 구조체에 대한 포인터를 수신하는 변수에 대한 포인터입니다. DEVICE_OBJECT 구조체는 비페이지 풀에서 할당됩니다.

반환 값

WdmlibIoCreateDeviceSecure 는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 NTSTATUS 오류 코드를 반환합니다. 이 함수에서 반환할 수 있는 오류 코드의 일부 목록은 다음과 같습니다.

설명

WdmlibIoCreateDeviceSecure 는 명명된 디바이스 개체를 만들고, 지정된 보안 설정을 적용하고, 개체에 대한 포인터를 반환합니다. 호출자는 IoDeleteDevice를 호출하여 더 이상 필요하지 않은 경우 개체를 삭제해야 합니다.

이 루틴은 운영 체제의 일부가 아닙니다. 드라이버는 Microsoft Windows 2000 이상 버전의 Windows에서 Wdmsec.lib에 연결하여 루틴을 사용할 수 있습니다. (Wdmsec.lib 라이브러리는 먼저 Microsoft Windows XP 서비스 팩 1 [SP1] 및 Windows Server 2003 버전의 드라이버 개발 키트[DDK]와 함께 제공되었으며 Windows 드라이버 키트[WDK]와 함께 제공됩니다.)

INF 파일에서 보안 설명자를 설정하도록 보장되지 않는 명명된 디바이스 개체를 만드는 모든 드라이버는 WdmlibIoCreateDeviceSecure를 사용해야 합니다. 자세한 내용은 디바이스 개체 만들기를 참조하세요. 호출자는 반환된 디바이스 개체의 특정 멤버를 설정해야 합니다. 자세한 내용은 디바이스 개체 초기화 및 디바이스 에 대한 디바이스 유형별 설명서를 참조하세요.

DeviceType 및 DeviceCharacteristics 값을 올바른 매개 변수에 지정해야 합니다. 두 매개 변수 모두 시스템 정의 FILE_XXX 상수를 사용하며 일부 드라이버 작성기는 실수로 잘못된 매개 변수의 값을 지정합니다.

호출자는 플래그 필드와 같이 반환된 디바이스 개체에서 특정 필드를 설정하고 드라이버 정의 정보를 사용하여 디바이스 확장을 초기화해야 합니다. 새 디바이스 개체에 필요한 다른 작업은 디바이스 개체 초기화 및 디바이스 에 대한 디바이스 유형별 설명서를 참조하세요.

DeviceClassGuid 매개 변수에 지정된 GUID는 디바이스 개체에 대한 디바이스 설정 클래스를 결정합니다. (디바이스 설정 클래스에 대한 자세한 내용은 디바이스 설정 클래스를 참조하세요.) 호출자는 시스템 관리자가 디바이스의 보안 설정을 변경할 수 있도록 값을 제공해야 합니다(instance 특정 사용자에 대한 액세스를 거부하려면). 자세한 내용은 설치 후 디바이스 개체 레지스트리 속성 설정을 참조하세요.

비 WDM 드라이버는 기존 디바이스 설정 클래스에서 아직 사용하지 않는 새 GUID를 지정합니다. Microsoft Windows SDK 포함된 GuidGen.exe 도구를 사용하여 새 GUID를 생성합니다.

원시 모드 지원 디바이스를 처리하는 WDM 버스 드라이버는 디바이스의 디바이스 설정 클래스를 지정할 수 있지만 해당 클래스가 이미 만들어진 경우에만 지정할 수 있습니다. 그렇지 않으면 새 GUID를 만듭니다.

디스크, 테이프, CD-ROM 및 RAM 디스크에 대한 디바이스 개체에는 볼륨이 디바이스에 탑재된 적이 없음을 나타내기 위해 초기화된 VPB(볼륨 매개 변수 블록)가 제공됩니다.

WdmlibIoCreateDeviceSecure에 대한 드라이버 호출이 오류를 반환하는 경우 드라이버는 해당 디바이스에 할당된 리소스를 해제해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 설명 섹션을 참조하십시오.
대상 플랫폼 데스크톱
머리글 wdmsec.h(Wdmsec.h 포함)
라이브러리 Wdmsec.lib
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 AddDevice(wdm), HwStorPortProhibitedDDDIs(storport), IrqlIoPassive1(wdm), MiniportOnlyWdmDevice

추가 정보

DEVICE_OBJECT

IoAttachDevice

IoAttachDeviceToDeviceStack

IoCreateDevice

IoCreateSymbolicLink

IoDeleteDevice