IoCreateDevice

IoCreateDevice 함수를 호출하여 장치 객체를 만듭니다. 예를 들어,
PDEVICE_OBJECT fdo;
NTSTATUS status = IoCreateDevice(DriverObject,
     sizeof(DEVICE_EXTENSION),
     NULL,
     FILE_DEVICE_UNKNOWN,
     FILE_DEVICE_SECURE_OPEN,
     FALSE,
     &fdo);

첫 번째 매개변수(DriverObject)가 AddDevice의 첫 번째 매개변수입니다.이 매개 변수는 드라이버와 새 디바이스 개체 간의 연결을 설정하는 데 사용되며 입출력 관리자가 디바이스에 지정된 IRP를 전송할 수 있습니다.
두 번째 매개변수는 장치 확장 구조의 크기입니다.이 장에서 설명한 바와 같이 I/O 관리자는 자동으로 이 메모리를 분배하고 장치 대상의 DeviceExtension 바늘을 이 메모리를 가리킨다.
세 번째 매개변수는 이 예에서 NULL입니다.장치 객체의 이름이 지정된 UNICODE 일 수 있습니다.STRING 열의 주소입니다.장치의 대상을 명명할지, 어떤 이름으로 명명할지 결정하는 데는 꼼꼼한 고려가 필요하다. 나는 이 절 뒤에서 이 문제를 깊이 토론할 것이다.
네 번째 매개변수(FILE DEVICE UNKNOWN)는 테이블 2-4에 나열된 장치 유형입니다.이 값은 장치 하드웨어 키나 클래스 키의 초월 값으로 대체할 수 있습니다. 만약 이 두 키가 모두 이 파라미터의 초월 값을 포함한다면 하드웨어 키의 초월 값은 더욱 높은 우선권을 가집니다.이미 존재하는 클래스에 속하는 장치에 대해서는 드라이버와 외부 시스템의 상호작용이 이 값에 의존해야 하기 때문에 정확한 값을 지정해야 한다.또한 장치 대상의 기본 보안 설정도 이 장치 유형 값에 의존합니다.
다섯 번째 매개변수(FILE DEVICE SECURE OPEN)는 장치 객체에 Characteristics 플래그를 제공합니다(표 2-3 참조).이러한 플래그는 주로 블록 저장 장치(예를 들어 플로피, CDROM, Jaz 등)에 관계된다.미공개 플래그 FILEAUTOGENERATED_DEVICE_NAME은 내부에서만 사용되며 DDK 문서에서 이 로고를 잊어버린 것은 아닙니다.이 매개 변수 역시 하드웨어 키나 클래스 키의 대응 값에 초월될 수 있다. 만약에 두 값이 모두 존재한다면 하드웨어 키의 초월 값은 더욱 높은 우선권을 가진다.
여섯 번째 매개변수(FALSE)는 장치가 제외되었는지 여부를 나타냅니다.일반적으로 배척 장치의 경우 I/O 관리자는 장치의 핸들 하나만 열 수 있습니다.이 값 역시 등록표에 있는 하드웨어 키와 클래스 키의 값에 초월될 수 있다. 만약에 두 개의 초월 값이 모두 존재한다면 하드웨어 키의 초월 값은 더욱 높은 우선권을 가진다.
일반적으로 장치 개체는/Device 디렉토리에 자신의 이름을 저장합니다.Windows 2000에서 디바이스 이름은 두 가지 용도로 사용됩니다.첫 번째 용도는 장치 이름을 지정하면 다른 커널 모드 위젯에서 IoGetDeviceObjectPointer 함수를 호출하여 장치를 찾을 수 있으며, 장치 대상을 찾으면 장치 드라이버에 IRP를 보낼 수 있습니다.
또 다른 용도로는 프로그램이 IRP를 드라이버에 보낼 수 있도록 명명된 장치의 핸들을 열 수 있도록 한다.응용 프로그램은 표준 CreateFile API를 사용하여 명명된 장치 핸들을 열고 ReadFile, WriteFile 및 DeviceIoControl을 사용하여 드라이버에 요청할 수 있습니다.응용 프로그램에서 장치 핸들을 열 때//./C:/MYFILE과 같은 표준 UNC(Unified Name Program) 이름 대신 경로 접두사CPP 또는//FRED/C-Drive/HISFILE.CPP.내부 I/O 관리자는 이름 검색을 수행하기 전에//.//??/로 변환합니다.하기 위해서/??디렉토리의 이름은 다른 디렉토리(예:/Device 디렉토리)에 있는 개체와 연결되며, 개체 관리자는 기호 연결(symbolic link)이라는 개체를 구현합니다.'/////////////////이 IRP가 앱 다운 드라이버인 것 같아요.

좋은 웹페이지 즐겨찾기