2017-11-07 1 views
4

ZwQueryValueKey 명령을 사용하여 드라이버가이 테이블의 모든 키에 직접 액세스 할 수있는 Windows 레지스트리와 동일한 Mac이 없기 때문에 사용자 공간 에이전트에서 커널로 매개 변수를 구성하는 보편적 인 방법을 찾고 있습니다.IOKit 명령을 통해 CFDictionary 전달

따라서 변수 목록을 CFDictionary을 통해 전달하고 싶습니다.

IOConnectCallMethod에는 입력 포인터를 전달하는 방법이 있지만 단순한 구조체 대신 CFDictionary 또는 CFDictionaryRef을 전달할 수 있는지 여부가 문제입니다.

IOServiceGetMatchingService과 같이 직접 CFDictionaryRef를 전달할 수있는 일부 IOkit 명령이 있지만 드라이버 모듈을위한 것이 아니라 드라이버를 관리하는 엔티티 용입니다.

답변

1

사용자 공간과 커널 공간간에 plist-like 데이터를 교환하는 데 I/O Kit 등록 정보 메커니즘을 사용할 수 있습니다. 커널 측면에서

  • IORegistryEntrySetCFProperty
  • IORegistryEntrySetCFProperties
  • IOConnectSetCFProperty
  • IOConnectSetCFProperties

: 사용자 공간에서 그들을 설정 들어, 다음과 같은 IOKitLib 기능 중 하나 이상을 사용하는 것이 좋습니다 IOService 또는 IOUserClient 하위 클래스는 virtual IOReturn setProperties(OSObject * properties); 함수를 재정의해야합니다. 수신 된 데이터를 적대적으로 다루는 것을 잊지 마시고 nullptr을 확인하십시오. OSData/OSNumber/OSString/OSArray/012 등을 예상 할 때 OSDynamicCast()을 사용하십시오. 데이터 자체를 객체화하고 위생 처리합니다.

IORegistryEntry 개체의 속성을 setProperties()이 자동으로 업데이트하지 않는다는 것을 확인한 후에는 모든 속성 키/값 키를 확인한 후에도 this->setProperty()을 호출해야합니다.

Apple은이 메커니즘에도 some basic high-level documentation을 제공합니다.

+0

그게 꼭 필요한 것입니다. 감사 ! – Zohar81

관련 문제