1

私が書いているドライバーのサービスを開こうとすると(SimpleUserClientの例ではユーザークライアントを使用)、IOServiceOpenは0x10000003(MACH_SEND_INVALID_REQUEST)を返します。

mach_port_t machPort = mach_task_self();
kern_return_t kernResult;
io_service_t service;

classesToMatch = IOServiceNameMatching(DRIVER_NAME);

kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, classesToMatch, &iterator); 

while ((service = IOIteratorNext(iterator)) != IO_OBJECT_NULL){
    kernResult = IOServiceOpen(service, machPort, 0, &connect);

    if (kernResult != KERN_SUCCESS){
        //0x10000003 = MACH_SEND_INVALID_DEST causes a return false here
        fprintf(stderr, "IOServiceOpen returned 0x%08x - machPort is %lu\n"), kernResult, machPort);
        return false;
    }
}

したがって、サービスが開かれることはありません。

4

1 に答える 1

1

コードでユーザークライアントクラスが何と呼ばれるかを示すために、ドライバーパーソナリティに辞書エントリを追加する必要があります。

IOUserClientClass:     com_MyCompany_driver_MyDriverUserClient
于 2012-09-13T12:54:20.487 に答える