jreing
jreing

Reputation: 281

IOPCIDevice invalidated when calling from a different user process

I'm working with Apple's DriverKitUserClientSample code as a basis, but I'm trying to use the PCIDriverKit. In my MyClass::Start method I successfully get the IOPCIDevice from the provider, and call Open() and GetBusDeviceFunction() on it, getting the correct values. This method (MyClass::Start) is called when I install the DEXT using the DriverKitSampleApp. I save the pointer to this IOPCIDevice as a member in the MyClass::IVars struct.

After installing the DEXT I want to access that same device using a user program I'm writing, that calls a different method MyClass::Foo. But when I try to run the same two functions Open() and/or GetBusDeviceFunction() from my method MyClass::Foo I get a kernel crash. With LLDB I see that I'm getting a GPF when accessing the IOPCIDevice object, even though I can still access other members of the MyClass::IVars struct (ints, chars etc) with no problem.

What am I doing wrong? Any hint?

Upvotes: 1

Views: 150

Answers (1)

jreing
jreing

Reputation: 281

Problem resolved: I didn't call Start(provider, SUPERDISPATCH) in my Start() function before casting the provider to IOPCIDevice. After adding this to the code, crash stopped occurring.

Upvotes: 1

Related Questions