다음을 통해 공유


AddDevice 루틴 작성 지침

AddDevice 루틴을 작성할 때 다음 디자인 지침을 고려합니다.

  • 필터 드라이버가 서비스할 필요가 없는 디바이스에 대해 AddDevice 루틴이 호출되었다고 판단하는 경우 필터 드라이버는 디바이스에 대해 디바이스 스택의 나머지 부분을 로드할 수 있도록 STATUS_SUCCESS 반환해야 합니다. 필터 드라이버는 디바이스 개체를 만들거나 디바이스 스택에 연결하지 않습니다. 필터 드라이버는 성공을 반환하고 나머지 드라이버를 스택에 추가할 수 있습니다.

  • 드라이버는 일반적으로 디바이스 개체의 디바이스 확장에서 커널 정의 개체 및 사용하는 임원 스핀 잠금에 대한 스토리지를 제공해야 합니다. 또한 드라이버는 I/O 관리자 또는 다른 시스템 구성 요소에서 가져온 특정 개체에 대한 포인터에 대한 스토리지를 제공해야 합니다.

    장기 I/O 버퍼 또는 lookaside 목록과 같이 드라이버 요구 사항에 맞게 추가 시스템 공간 메모리를 할당하도록 결정할 수 있습니다. 이 경우 AddDevice 루틴은 다음 루틴을 호출할 수 있습니다.

    페이지가 지정되거나 페이지가 지정되지 않은 시스템 공간 메모리에 대한 ExAllocatePoolWithTag

    ExInitializePagedLookasideList 또는 ExInitializeNPagedLookasideList 를 사용하여 페이지가 지정되거나 페이지가 없는 lookaside 목록을 초기화합니다.

  • 드라이버에 디바이스 전용 스레드가 있거나 커널 정의 디스패처 개체를 기다리는 경우 AddDevice 루틴은 커널 디스패처 개체를 초기화할 수 있습니다.

  • 드라이버가 임원 스핀 잠금을 사용하거나 인터럽트 스핀 잠금에 대한 스토리지를 제공하는 경우 AddDevice 루틴은 이러한 스핀 잠금을 초기화할 수 있습니다. 자세한 내용은 스핀 잠금 을 참조하세요.

  • IoCreateDevice를 호출할 때 파일 열기 보안을 강화합니다.

    IoCreateDevice 호출에서 FILE_DEVICE_SECURE_OPEN 특성을 지정합니다. 이 특성은 Windows NT 4.0 SP5 이상에서 지원됩니다. I/O 관리자가 열려 있는 모든 요청에 대해 디바이스 개체에 대한 보안 검사를 수행하도록 지시합니다. 공급업체는 디바이스의 클래스 설치 관리자 INF 또는 디바이스의 INF에서 FILE_DEVICE_SECURE_OPEN 특성이 설정되지 않고 드라이버가 열린 경우 자체 보안 검사를 수행하지 않는 경우 IoCreateDevice 호출 시 이 특성을 지정해야 합니다. (자세한 내용은 디바이스 네임스페이스 액세스 제어를 참조하세요.)

    드라이버가 IoCreateDevice를 호출할 때 FILE_DEVICE_SECURE_OPEN 특성을 설정하는 경우 I/O 관리자는 디바이스 개체의 보안 설명자를 여는 상대 열기 또는 후행 파일 이름 열기에 적용합니다. 예를 들어 FILE_DEVICE_SECURE_OPEN \Device\foo로 설정되어 있고 관리자만 \Device\foo를 열 수 있는 경우 관리자가 \Device\foo\abc를 열 수도 있습니다. 그러나 I/O 관리자는 일반 사용자가 \Device\foo 및 \Device\foo\abc를 열지 못하게 합니다.

    디바이스에 대한 한 드라이버가 이 특성을 설정하는 경우 PnP 관리자는 디바이스의 모든 디바이스 개체에 전파합니다.

중요

이 항목에서 설명하는 ExAllocatePool DDI는 Windows 10 버전 2004에서 더 이상 사용되지 않으며 ExAllocatePool2ExAllocatePool3으로 대체되었습니다. 자세한 내용은 ExAllocatePool2 및 ExAllocatePool3에 더 이상 사용되지 않는 ExAllocatePool 호출 업데이트를 참조하세요.