WDM(디바이스 액세스) 제어

디바이스에 대한 액세스는 보안 설명자(및 디바이스에 포함된 ACL)에 의해 제어됩니다. 디바이스 개체를 만들거나 레지스트리에서 설정할 때 디바이스 개체에 대한 보안 설명자를 지정할 수 있습니다.

WDM 드라이버에 대한 디바이스 액세스 제어

WDM 드라이버(특정 버스 드라이버 제외)가 디바이스 개체를 만들면 플러그 앤 플레이 관리자가 디바이스에 대한 보안 설명자를 결정합니다. 작업의 순서는 다음과 같습니다.

  1. PnP 관리자는 드라이버의 AddDevice 루틴을 호출합니다.

  2. 드라이버의 AddDevice 루틴은 IoCreateDevice 를 호출하여 디바이스 개체를 만들고 디바이스 개체 스택에 연결합니다.

  3. PnP 관리자는 새로 만든 디바이스 개체에 대한 보안 설명자를 업데이트합니다.

WDM 드라이버의 경우 PnP 관리자는 다음과 같이 디바이스 개체의 보안 설명자를 결정합니다.

  1. 디바이스에 레지스트리에 보안 설명자 설정이 있는 경우 디바이스 스택의 모든 개체에 적용됩니다.

  2. 그렇지 않으면 디바이스의 설정 클래스에 레지스트리에 보안 설명자 설정이 있는 경우 디바이스 스택의 모든 개체에 적용됩니다.

  3. 그렇지 않으면 PnP 관리자는 각 개체에 대한 기본 보안 설명자를 변경하지 않고 그대로 둡니다. 이 경우 스택의 기본 보안 설명자는 PDO의 디바이스 유형 및 디바이스 특성에 따라 결정됩니다.

대부분의 디바이스 유형 및 특성에 대해 기본 보안 설명자는 관리자에게 전체 액세스(GENERIC_ALL)를 제공하고 읽기, 쓰기 및 실행 액세스(GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE) 다른 모든 사용자에 대한 액세스.

레지스트리에서 디바이스 또는 디바이스 설정 클래스에 대한 보안 설명자를 설정하는 방법에 대한 자세한 내용은 레지스트리 에서 디바이스 개체 속성 설정을 참조하세요.

디바이스가 원시 모드로 작동하는 경우 PnP 관리자는 디바이스 개체에 대한 보안 설명자를 확인할 수 없습니다. 이 경우 버스 드라이버는 보안 설명자를 제공해야 합니다. 아래를 참조하세요.

WDM 버스 드라이버에 대한 디바이스 액세스 제어

WDM 버스 드라이버는 원시 모드에서 작동할 수 있는 모든 디바이스의 PDO에 대한 보안 설명자를 제공해야 합니다. IoCreateDeviceSecure를 사용하여 보안 설명자를 사용하여 디바이스 개체를 만듭니다.

버스 드라이버가 원시 모드에서 디바이스를 작동하지 않는 경우 보안 설명자를 제공할 필요가 없습니다. PnP 관리자는 위에서 설명한 대로 보안 설명자를 결정합니다. 버스 드라이버는 PDO에 기본 설명자보다 더 엄격한 보안 설정이 있는지 확인해야 하는 경우 보안 설명자를 제공할 수 있습니다. 버스 드라이버에서 지정한 설명자는 레지스트리의 설정에 의해 재정의됩니다.

디바이스 개체를 만드는 방법에 대한 자세한 내용은 디바이스 개체 만들기를 참조하세요.

비 WDM 드라이버에 대한 디바이스 액세스 제어

비 WDM 드라이버는 만든 명명된 디바이스 개체에 대해 기본 보안 설명자 및 클래스 GUID를 지정해야 합니다.

IoCreateDeviceSecure 루틴을 사용하여 명명된 디바이스 개체를 만들고 해당 디바이스에 대한 기본 보안 설명자 및 클래스 GUID를 지정합니다. 보안 설명자는 SDDL의 하위 집합에 지정됩니다. 자세한 내용은 디바이스 개체용 SDDL을 참조하세요.

시스템은 지정된 클래스 GUID에 대한 레지스트리의 보안 설정을 사용하여 기본 보안 설명자를 재정의합니다. 드라이버는 디바이스에 고유한 GUID를 지정해야 합니다. GuidGen 도구를 사용하여 고유한 GUID를 생성합니다. (GuidGen은 Microsoft Windows SDK 포함되어 있습니다.)