1 #include "TestIOUserClient2022Entitlements.h"
2 #include <IOKit/IOService.h>
3 #include <IOKit/IOUserClient.h>
4 #include <IOKit/IOKitServer.h>
5 #include <kern/ipc_kobject.h>
6
7 #if (DEVELOPMENT || DEBUG)
8
9 OSDefineMetaClassAndStructors(TestIOUserClient2022Entitlements, IOService);
10
11 OSDefineMetaClassAndStructors(TestIOUserClient2022EntitlementsUserClient, IOUserClient2022);
12
13 bool
start(IOService * provider)14 TestIOUserClient2022Entitlements::start(IOService * provider)
15 {
16 OSString * str = OSString::withCStringNoCopy("TestIOUserClient2022EntitlementsUserClient");
17 bool ret = IOService::start(provider);
18 if (ret && str != NULL) {
19 setProperty(gIOUserClientClassKey, str);
20 registerService();
21 }
22 OSSafeReleaseNULL(str);
23 return ret;
24 }
25
26 bool
start(IOService * provider)27 TestIOUserClient2022EntitlementsUserClient::start(IOService * provider)
28 {
29 if (!IOUserClient2022::start(provider)) {
30 return false;
31 }
32 setProperty(kIOUserClientDefaultLockingKey, kOSBooleanTrue);
33 setProperty(kIOUserClientDefaultLockingSetPropertiesKey, kOSBooleanTrue);
34 setProperty(kIOUserClientDefaultLockingSingleThreadExternalMethodKey, kOSBooleanTrue);
35
36 setProperty(kIOUserClientEntitlementsKey, "com.apple.iokit.test-check-entitlement-open");
37
38 return true;
39 }
40
41 IOReturn
clientClose()42 TestIOUserClient2022EntitlementsUserClient::clientClose()
43 {
44 terminate();
45 return kIOReturnSuccess;
46 }
47
48 IOReturn
extBasicMethod(OSObject * target,void * reference,IOExternalMethodArguments * arguments)49 TestIOUserClient2022EntitlementsUserClient::extBasicMethod(OSObject * target, void * reference, IOExternalMethodArguments * arguments)
50 {
51 return kIOReturnSuccess;
52 }
53
54 IOReturn
extPerSelectorCheck(OSObject * target,void * reference,IOExternalMethodArguments * arguments)55 TestIOUserClient2022EntitlementsUserClient::extPerSelectorCheck(OSObject * target, void * reference, IOExternalMethodArguments * arguments)
56 {
57 return kIOReturnSuccess;
58 }
59
60 IOReturn
externalMethod(uint32_t selector,IOExternalMethodArgumentsOpaque * args)61 TestIOUserClient2022EntitlementsUserClient::externalMethod(uint32_t selector, IOExternalMethodArgumentsOpaque * args)
62 {
63 static const IOExternalMethodDispatch2022 dispatchArray[] = {
64 [0] {
65 .function = &TestIOUserClient2022EntitlementsUserClient::extBasicMethod,
66 .checkScalarInputCount = 0,
67 .checkStructureInputSize = 0,
68 .checkScalarOutputCount = 0,
69 .checkStructureOutputSize = 0,
70 .allowAsync = false,
71 .checkEntitlement = NULL,
72 },
73 [1] {
74 .function = &TestIOUserClient2022EntitlementsUserClient::extPerSelectorCheck,
75 .checkScalarInputCount = 0,
76 .checkStructureInputSize = 0,
77 .checkScalarOutputCount = 0,
78 .checkStructureOutputSize = 0,
79 .allowAsync = false,
80 .checkEntitlement = "com.apple.iokit.test-check-entitlement-per-selector",
81 },
82 };
83
84 return dispatchExternalMethod(selector, args, dispatchArray, sizeof(dispatchArray) / sizeof(dispatchArray[0]), this, NULL);
85 }
86
87 #endif /* (DEVELOPMENT || DEBUG) */
88