1/* 2 * @APPLE_LICENSE_HEADER_START@ 3 * 4 * Copyright (c) 2010 Apple Computer, Inc. All Rights Reserved. 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25#ifndef _IOKIT_IOHIDSECUREPROMPTCLIENT_H 26#define _IOKIT_IOHIDSECUREPROMPTCLIENT_H 27 28#include <libkern/c++/OSContainers.h> 29#include <IOKit/IOUserClient.h> 30 31struct IOHIDSecurePromptClient_ExpansionData; 32 33#ifndef sub_iokit_hidsystem 34#define sub_iokit_hidsystem err_sub(14) 35#endif 36 37class IOHIDSecurePromptClient : public IOUserClient 38{ 39 OSDeclareDefaultStructors(IOHIDSecurePromptClient) 40 41private: 42 IOHIDSecurePromptClient_ExpansionData *_reserved; 43 44public: 45 // IOService methods 46 void free(); 47 bool start( IOService * provider ); 48 49 // IOUserClient methods 50 bool initWithTask(task_t owningTask, 51 void * securityToken, 52 UInt32 type, 53 OSDictionary * properties); 54 55 IOReturn clientClose( void ); 56 57 IOExternalMethod* getTargetAndMethodForIndex(IOService ** targetP, 58 UInt32 index ); 59// IOExternalAsyncMethod* getAsyncTargetAndMethodForIndex(IOService ** targetP, UInt32 index ); 60 IOReturn registerNotificationPort(mach_port_t port, 61 UInt32 type, 62 io_user_reference_t refCon); 63 64 65 // IOHIDSecurePromptClient in kernel methods 66 bool gathering(); 67 bool dead(); 68 void setNotifier(IONotifier *notifier); 69 70 IOReturn postKey(UInt32 key, bool down); 71 IOReturn postKeyGated(void * p1, void * p2, void * p3,void * p4); 72 73 // IOHIDSecurePromptClient external methods 74 IOReturn setGatheringMethod(void * p1, void * p2, void * p3, 75 void * p4, void * p5, void * p6 ); 76 IOReturn setGathering(UInt32 state); 77 78 IOReturn getGatheringMethod(void * p1, void * p2, void * p3, 79 void * p4, void * p5, void * p6 ); 80 81 IOReturn setLayoutMethod(void * p1, void * p2, void * p3, 82 void * p4, void * p5, void * p6 ); 83 IOReturn setLayoutGated(void * p1, void * p2, void * p3,void * p4); 84 IOReturn setLayout(UInt32 layout); 85 86 IOReturn getLayoutMethod(void * p1, void * p2, void * p3, 87 void * p4, void * p5, void * p6 ); 88 89 IOReturn confirmKeyMethod(void * p1, void * p2, void * p3, 90 void * p4, void * p5, void * p6 ); 91 IOReturn confirmKeyGated(void * p1, void * p2, void * p3,void * p4); 92 IOReturn confirmKey(UInt32 id, UInt32 *count); 93 94 IOReturn deleteKeysMethod(void * p1, void * p2, void * p3, 95 void * p4, void * p5, void * p6 ); 96 IOReturn deleteKeysGated(void * p1, void * p2, void * p3,void * p4); 97 IOReturn deleteKeys(SInt32 index, UInt32 count, UInt32 *length); 98 99 IOReturn setUUIDMethod(void * p1, void * p2, void * p3, 100 void * p4, void * p5, void * p6 ); 101 IOReturn setUUIDGated(void * p1, void * p2, void * p3,void * p4); 102 IOReturn setUUID(UInt8* bytes_in); 103 104 IOReturn getUUIDMethod(void * p1, void * p2, void * p3, 105 void * p4, void * p5, void * p6 ); 106 IOReturn getUUIDGated(void * p1, void * p2, void * p3, void * p4); 107 108 IOReturn compareClientMethod(void * p1, void * p2, void * p3, 109 void * p4, void * p5, void * p6 ); 110 111 IOReturn getIdentifierMethod(void * p1, void * p2, void * p3, 112 void * p4, void * p5, void * p6 ); 113 uint64_t identifier(); 114 115 IOReturn getInsertionPointMethod(void * p1, void * p2, void * p3, 116 void * p4, void * p5, void * p6 ); 117 uint64_t getInsertionPoint(); 118 119 IOReturn setInsertionPointMethod(void * p1, void * p2, void * p3, 120 void * p4, void * p5, void * p6 ); 121 IOReturn setInsertionPointGated(void * p1, void * p2, void * p3,void * p4); 122 123 IOReturn injectStringMethod(void * p1, void * p2, void * p3, 124 void * p4, void * p5, void * p6 ); 125 IOReturn injectStringGated(void * p1, void * p2, void * p3,void * p4); 126 127 static IOHIDSecurePromptClient* 128 nextForIterator(OSIterator * iterator); 129 130 enum { 131 clientID = 0x48535043, // HSPC 132 keyMessage = 0x48535043, // HSPC 133 gatheringMessage= iokit_family_msg(sub_iokit_hidsystem, 4), 134 }; 135 136private: 137 void queueMessage(UInt8 code); 138 IOReturn appendConfirmedKeyCode(UInt8 modifier, UInt8 code); 139 void releaseReserved(); 140 bool valid(); 141 UInt8 modifierState(); 142 bool modifierDown(UInt8 modifierFlag); 143 void sync(); 144 IOReturn syncGated(void * p1, void * p2, void * p3,void * p4); 145 IOReturn ensureBufferSize(UInt32 size); 146 147 148}; 149 150#endif /* ! _IOKIT_IOHIDSECUREPROMPTCLIENT_H */ 151