디바이스 네임스페이스 액세스 제어

WDM(Windows 드라이버 모델)에서 모든 디바이스 개체에는 연결된 네임스페이스가 있습니다. 디바이스 네임스페이스의 이름은 디바이스 이름으로 시작하는 경로입니다. "\DeviceName\"이라는 디바이스의 경우 네임스페이스는 "\DeviceName\FileName\" 형식의 이름으로 구성됩니다. 파일 시스템의 경우 FileName 은 파일 시스템에 있는 파일의 실제 이름입니다.

WDM 드라이버는 디바이스 네임스페이스의 모든 이름에 대해 열린 요청을 받습니다. 드라이버는 "\Device DeviceName\"에 대한 열린 요청을 디바이스 개체 자체의 열기로 처리합니다. 드라이버가 디바이스의 네임스페이스에 열린 요청에 대한 지원을 구현하는 경우 "\DeviceName\\FileName"에 대한 열린 요청을 디바이스 개체의 네임스페이스 내에서 열린 "파일"(디바이스에 대한 "파일"의 개념이 드라이버로 결정됨)으로 처리합니다.

대부분의 드라이버는 디바이스의 네임스페이스에 대한 열린 작업에 대한 지원을 구현하지 않지만 모든 드라이버는 디바이스의 네임스페이스에 대한 무단 액세스를 방지하기 위해 보안 검사를 제공해야 합니다. 기본적으로 디바이스 네임스페이스 내에서 파일 열기 요청(예: "\DeviceName\\FileName")에 대한 보안 검사는 전적으로 드라이버에 달려 있습니다. 디바이스 개체 ACL은 운영 체제에서 확인하지 않습니다.

디바이스 개체의 FILE_DEVICE_SECURE_OPEN 특성이 설정된 경우 시스템은 디바이스의 네임스페이스에 있는 모든 파일 열기 요청에 디바이스 개체의 보안 설명자를 적용합니다. 드라이버는 IoCreateDevice 또는IoCreateDeviceSecure를 사용하여 디바이스 개체를 만들 때 FILE_DEVICE_SECURE_OPEN 설정할 수 있습니다. WDM 드라이버의 경우 레지스트리에서 FILE_DEVICE_SECURE_OPEN 설정할 수도 있습니다. IoCreateDeviceSecure에서 만든 비 WDM 드라이버의 디바이스 개체에 대해 레지스트리에서 설정할 수도 있습니다. 레지스트리에서 디바이스 특성과 같은 디바이스 개체 속성을 설정하는 방법에 대한 자세한 내용은 레지스트리 에서 디바이스 개체 속성 설정을 참조하세요. 디바이스 특성에 대한 자세한 내용은 디바이스 특성 지정을 참조하세요.

네임스페이스를 지원하지 않는 디바이스의 드라이버는 두 가지 방법 중 하나를 사용하여 디바이스의 네임스페이스 내에서 열린 파일 요청이 올바르게 처리되도록 해야 합니다.

  • 드라이버의 디바이스 개체에는 FILE_DEVICE_SECURE_OPEN 디바이스 특성 집합이 있습니다. 그런 다음 드라이버는 열려 있는 모든 요청을 디바이스의 네임스페이스로 디바이스 개체에 대한 열린 요청으로 처리할 수 있습니다.

  • 드라이버는 길이가 0이 아닌 IrpSp-FileObject-FileName>> 매개 변수를 지정하는 IRP_MJ_CREATE 요청에 실패할 수 있습니다. 이 경우 디바이스에 대한 열린 요청에는 시스템의 ACL 검사 적용되지만 디바이스의 네임스페이스 내에서 열려 있는 모든 요청은 드라이버에 의해 실패합니다. (단독 열기를 지원하는 드라이버는 이 옵션을 사용해야 합니다.)

네임스페이스를 지원하는 디바이스용 드라이버는 두 가지 방법을 사용하여 파일 열기 요청을 디바이스의 네임스페이스로 보호할 수도 있습니다.

  • 드라이버의 디바이스 개체에는 FILE_DEVICE_SECURE_OPEN 디바이스 특성 집합이 있습니다. 이렇게 하면 디바이스의 보안 설정이 디바이스의 네임스페이스에 균일하게 적용됩니다. (드라이버는 DRIVER_DISPATCH 콜백 함수에서 네임스페이스에 대한 지원을 구현해야 합니다.)

  • 드라이버는 DispatchCreate 루틴에서 파일 이름에 대한 ACL을 확인합니다. (이 경우에도 디바이스의 네임스페이스에 열리지 않는 한 드라이버는 FILE_DEVICE_SECURE_OPEN 특성을 설정해야 합니다. 디바이스 개체보다 보안 설정이 약할 수 있습니다.)

FILE_DEVICE_SECURE_OPEN 특성은 스택 맨 위에서 확인되므로 필터 디바이스 개체는 연결 후 다음 하위 디바이스 개체의 Characteristics 멤버를 복사해야 합니다.