p2p.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. /**
  2. * This file is part of the mingw-w64 runtime package.
  3. * No warranty is given; refer to the file DISCLAIMER within this package.
  4. */
  5. #ifndef _P2P_H_
  6. #define _P2P_H_
  7. #include <winapifamily.h>
  8. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  9. #ifndef __WIDL__
  10. #include <winsock2.h>
  11. #include <pnrpns.h>
  12. #include <ws2tcpip.h>
  13. #include <specstrings.h>
  14. #endif
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #if NTDDI_VERSION < 0x06000000
  19. #ifndef NO_P2P_PNRP
  20. #define NO_P2P_PNRP
  21. #endif
  22. #ifndef NO_P2P_COLLABORATION
  23. #define NO_P2P_COLLABORATION
  24. #endif
  25. #endif
  26. typedef enum peer_record_change_type_tag {
  27. PEER_RECORD_ADDED = 1,
  28. PEER_RECORD_UPDATED = 2,
  29. PEER_RECORD_DELETED = 3,
  30. PEER_RECORD_EXPIRED = 4,
  31. } PEER_RECORD_CHANGE_TYPE;
  32. typedef enum peer_connection_status_tag {
  33. PEER_CONNECTED = 1,
  34. PEER_DISCONNECTED = 2,
  35. PEER_CONNECTION_FAILED = 3,
  36. } PEER_CONNECTION_STATUS;
  37. typedef enum peer_connection_flags_tag {
  38. PEER_CONNECTION_NEIGHBOR = 0x0001,
  39. PEER_CONNECTION_DIRECT = 0x0002,
  40. } PEER_CONNECTION_FLAGS;
  41. typedef enum peer_record_flags_tag {
  42. PEER_RECORD_FLAG_AUTOREFRESH = 0x0001,
  43. PEER_RECORD_FLAG_DELETED = 0x0002,
  44. } PEER_RECORD_FLAGS;
  45. typedef
  46. #ifdef __WIDL__
  47. [context_handle]
  48. #endif
  49. void *HPEEREVENT;
  50. typedef HPEEREVENT *PHPEEREVENT;
  51. typedef
  52. #ifdef __WIDL__
  53. [context_handle]
  54. #endif
  55. void *HPEERENUM;
  56. typedef HPEERENUM *PHPEERENUM;
  57. typedef struct peer_version_data_tag {
  58. WORD wVersion;
  59. WORD wHighestVersion;
  60. } PEER_VERSION_DATA,*PPEER_VERSION_DATA;
  61. typedef struct peer_data_tag {
  62. ULONG cbData;
  63. #ifdef __WIDL__
  64. [size_is (cbData)]
  65. #endif
  66. PBYTE pbData;
  67. } PEER_DATA,*PPEER_DATA;
  68. typedef const PEER_DATA *PCPEER_DATA;
  69. typedef struct peer_record_tag {
  70. DWORD dwSize;
  71. GUID type;
  72. GUID id;
  73. DWORD dwVersion;
  74. DWORD dwFlags;
  75. PWSTR pwzCreatorId;
  76. PWSTR pwzModifiedById;
  77. PWSTR pwzAttributes;
  78. FILETIME ftCreation;
  79. FILETIME ftExpiration;
  80. FILETIME ftLastModified;
  81. PEER_DATA securityData;
  82. PEER_DATA data;
  83. } PEER_RECORD,*PPEER_RECORD;
  84. typedef struct peer_address_tag {
  85. DWORD dwSize;
  86. SOCKADDR_IN6 sin6;
  87. } PEER_ADDRESS,*PPEER_ADDRESS;
  88. typedef const PEER_ADDRESS *PCPEER_ADDRESS;
  89. typedef struct peer_connection_info_tag {
  90. DWORD dwSize;
  91. DWORD dwFlags;
  92. ULONGLONG ullConnectionId;
  93. ULONGLONG ullNodeId;
  94. PWSTR pwzPeerId;
  95. PEER_ADDRESS address;
  96. } PEER_CONNECTION_INFO;
  97. typedef struct peer_event_incoming_data_tag {
  98. DWORD dwSize;
  99. ULONGLONG ullConnectionId;
  100. GUID type;
  101. PEER_DATA data;
  102. } PEER_EVENT_INCOMING_DATA,*PPEER_EVENT_INCOMING_DATA;
  103. typedef struct peer_event_record_change_data_tag {
  104. DWORD dwSize;
  105. PEER_RECORD_CHANGE_TYPE changeType;
  106. GUID recordId;
  107. GUID recordType;
  108. } PEER_EVENT_RECORD_CHANGE_DATA,*PPEER_EVENT_RECORD_CHANGE_DATA;
  109. typedef struct peer_event_connection_change_data_tag {
  110. DWORD dwSize;
  111. PEER_CONNECTION_STATUS status;
  112. ULONGLONG ullConnectionId;
  113. ULONGLONG ullNodeId;
  114. #if NTDDI_VERSION >= 0x06000000
  115. ULONGLONG ullNextConnectionId;
  116. HRESULT hrConnectionFailedReason;
  117. #endif
  118. } PEER_EVENT_CONNECTION_CHANGE_DATA,*PPEER_EVENT_CONNECTION_CHANGE_DATA;
  119. typedef struct peer_event_synchronized_data_tag {
  120. DWORD dwSize;
  121. GUID recordType;
  122. } PEER_EVENT_SYNCHRONIZED_DATA,*PPEER_EVENT_SYNCHRONIZED_DATA;
  123. #if !defined (NO_P2P_GRAPH) && !defined (__WIDL__)
  124. #define PEER_GRAPH_VERSION MAKEWORD (1, 0)
  125. typedef PVOID HGRAPH,*PHGRAPH;
  126. typedef enum peer_graph_event_type_tag {
  127. PEER_GRAPH_EVENT_STATUS_CHANGED = 1,
  128. PEER_GRAPH_EVENT_PROPERTY_CHANGED = 2,
  129. PEER_GRAPH_EVENT_RECORD_CHANGED = 3,
  130. PEER_GRAPH_EVENT_DIRECT_CONNECTION = 4,
  131. PEER_GRAPH_EVENT_NEIGHBOR_CONNECTION = 5,
  132. PEER_GRAPH_EVENT_INCOMING_DATA = 6,
  133. PEER_GRAPH_EVENT_CONNECTION_REQUIRED = 7,
  134. PEER_GRAPH_EVENT_NODE_CHANGED = 8,
  135. PEER_GRAPH_EVENT_SYNCHRONIZED = 9,
  136. } PEER_GRAPH_EVENT_TYPE;
  137. typedef enum peer_node_change_type_tag {
  138. PEER_NODE_CHANGE_CONNECTED = 1,
  139. PEER_NODE_CHANGE_DISCONNECTED = 2,
  140. PEER_NODE_CHANGE_UPDATED = 3,
  141. } PEER_NODE_CHANGE_TYPE;
  142. typedef enum peer_graph_status_flags_tag {
  143. PEER_GRAPH_STATUS_LISTENING = 0x0001,
  144. PEER_GRAPH_STATUS_HAS_CONNECTIONS = 0x0002,
  145. PEER_GRAPH_STATUS_SYNCHRONIZED = 0x0004,
  146. } PEER_GRAPH_STATUS_FLAGS;
  147. typedef enum peer_graph_property_flags_tag {
  148. PEER_GRAPH_PROPERTY_HEARTBEATS = 0x0001,
  149. PEER_GRAPH_PROPERTY_DEFER_EXPIRATION = 0x0002,
  150. } PEER_GRAPH_PROPERTY_FLAGS;
  151. typedef enum peer_graph_scope_tag {
  152. PEER_GRAPH_SCOPE_ANY = 0,
  153. PEER_GRAPH_SCOPE_GLOBAL = 1,
  154. PEER_GRAPH_SCOPE_SITELOCAL = 2,
  155. PEER_GRAPH_SCOPE_LINKLOCAL = 3,
  156. PEER_GRAPH_SCOPE_LOOPBACK = 4
  157. } PEER_GRAPH_SCOPE;
  158. typedef struct peer_graph_properties_tag {
  159. DWORD dwSize;
  160. DWORD dwFlags;
  161. DWORD dwScope;
  162. DWORD dwMaxRecordSize;
  163. PWSTR pwzGraphId;
  164. PWSTR pwzCreatorId;
  165. PWSTR pwzFriendlyName;
  166. PWSTR pwzComment;
  167. ULONG ulPresenceLifetime;
  168. ULONG cPresenceMax;
  169. } PEER_GRAPH_PROPERTIES,*PPEER_GRAPH_PROPERTIES;
  170. typedef struct peer_node_info_tag {
  171. DWORD dwSize;
  172. ULONGLONG ullNodeId;
  173. PWSTR pwzPeerId;
  174. ULONG cAddresses;
  175. PPEER_ADDRESS pAddresses;
  176. PWSTR pwzAttributes;
  177. } PEER_NODE_INFO,*PPEER_NODE_INFO;
  178. typedef struct peer_event_node_change_data_tag {
  179. DWORD dwSize;
  180. PEER_NODE_CHANGE_TYPE changeType;
  181. ULONGLONG ullNodeId;
  182. PWSTR pwzPeerId;
  183. } PEER_EVENT_NODE_CHANGE_DATA,*PPEER_EVENT_NODE_CHANGE_DATA;
  184. typedef struct peer_graph_event_registration_tag {
  185. PEER_GRAPH_EVENT_TYPE eventType;
  186. GUID *pType;
  187. } PEER_GRAPH_EVENT_REGISTRATION,*PPEER_GRAPH_EVENT_REGISTRATION;
  188. typedef struct peer_graph_event_data_tag {
  189. PEER_GRAPH_EVENT_TYPE eventType;
  190. __C89_NAMELESS union {
  191. PEER_GRAPH_STATUS_FLAGS dwStatus;
  192. PEER_EVENT_INCOMING_DATA incomingData;
  193. PEER_EVENT_RECORD_CHANGE_DATA recordChangeData;
  194. PEER_EVENT_CONNECTION_CHANGE_DATA connectionChangeData;
  195. PEER_EVENT_NODE_CHANGE_DATA nodeChangeData;
  196. PEER_EVENT_SYNCHRONIZED_DATA synchronizedData;
  197. };
  198. } PEER_GRAPH_EVENT_DATA,*PPEER_GRAPH_EVENT_DATA;
  199. typedef HRESULT (CALLBACK *PFNPEER_VALIDATE_RECORD) (HGRAPH hGraph, PVOID pvContext, PPEER_RECORD pRecord, PEER_RECORD_CHANGE_TYPE changeType);
  200. typedef HRESULT (CALLBACK *PFNPEER_SECURE_RECORD) (HGRAPH hGraph, PVOID pvContext, PPEER_RECORD pRecord, PEER_RECORD_CHANGE_TYPE changeType, PPEER_DATA *ppSecurityData);
  201. typedef HRESULT (CALLBACK *PFNPEER_FREE_SECURITY_DATA) (HGRAPH hGraph, PVOID pvContext, PPEER_DATA pSecurityData);
  202. typedef HRESULT (CALLBACK *PFNPEER_ON_PASSWORD_AUTH_FAILED) (HGRAPH hGraph, PVOID pvContext);
  203. typedef struct peer_security_interface_tag {
  204. DWORD dwSize;
  205. PWSTR pwzSspFilename;
  206. PWSTR pwzPackageName;
  207. ULONG cbSecurityInfo;
  208. PBYTE pbSecurityInfo;
  209. PVOID pvContext;
  210. PFNPEER_VALIDATE_RECORD pfnValidateRecord;
  211. PFNPEER_SECURE_RECORD pfnSecureRecord;
  212. PFNPEER_FREE_SECURITY_DATA pfnFreeSecurityData;
  213. PFNPEER_ON_PASSWORD_AUTH_FAILED pfnAuthFailed;
  214. } PEER_SECURITY_INTERFACE,*PPEER_SECURITY_INTERFACE;
  215. HRESULT WINAPI PeerGraphStartup (WORD wVersionRequested, PPEER_VERSION_DATA pVersionData);
  216. HRESULT WINAPI PeerGraphShutdown ();
  217. VOID WINAPI PeerGraphFreeData (PVOID pvData);
  218. HRESULT WINAPI PeerGraphGetItemCount (HPEERENUM hPeerEnum, ULONG *pCount);
  219. HRESULT WINAPI PeerGraphGetNextItem (HPEERENUM hPeerEnum, ULONG *pCount, PVOID **pppvItems);
  220. HRESULT WINAPI PeerGraphEndEnumeration (HPEERENUM hPeerEnum);
  221. HRESULT WINAPI PeerGraphCreate (PPEER_GRAPH_PROPERTIES pGraphProperties, PCWSTR pwzDatabaseName, PPEER_SECURITY_INTERFACE pSecurityInterface, HGRAPH *phGraph);
  222. HRESULT WINAPI PeerGraphOpen (PCWSTR pwzGraphId, PCWSTR pwzPeerId, PCWSTR pwzDatabaseName, PPEER_SECURITY_INTERFACE pSecurityInterface, ULONG cRecordTypeSyncPrecedence, const GUID *pRecordTypeSyncPrecedence, HGRAPH *phGraph);
  223. HRESULT WINAPI PeerGraphListen (HGRAPH hGraph, DWORD dwScope, DWORD dwScopeId, WORD wPort);
  224. HRESULT WINAPI PeerGraphConnect (HGRAPH hGraph, PCWSTR pwzPeerId, PPEER_ADDRESS pAddress, ULONGLONG *pullConnectionId);
  225. HRESULT WINAPI PeerGraphClose (HGRAPH hGraph);
  226. HRESULT WINAPI PeerGraphDelete (PCWSTR pwzGraphId, PCWSTR pwzPeerId, PCWSTR pwzDatabaseName);
  227. HRESULT WINAPI PeerGraphGetStatus (HGRAPH hGraph, DWORD *pdwStatus);
  228. HRESULT WINAPI PeerGraphGetProperties (HGRAPH hGraph, PPEER_GRAPH_PROPERTIES *ppGraphProperties);
  229. HRESULT WINAPI PeerGraphSetProperties (HGRAPH hGraph, PPEER_GRAPH_PROPERTIES pGraphProperties);
  230. HRESULT WINAPI PeerGraphRegisterEvent (HGRAPH hGraph, HANDLE hEvent, ULONG cEventRegistrations, PEER_GRAPH_EVENT_REGISTRATION *pEventRegistrations, HPEEREVENT *phPeerEvent);
  231. HRESULT WINAPI PeerGraphUnregisterEvent (HPEEREVENT hPeerEvent);
  232. HRESULT WINAPI PeerGraphGetEventData (HPEEREVENT hPeerEvent, PPEER_GRAPH_EVENT_DATA *ppEventData);
  233. HRESULT WINAPI PeerGraphGetRecord (HGRAPH hGraph, const GUID *pRecordId, PPEER_RECORD *ppRecord);
  234. HRESULT WINAPI PeerGraphAddRecord (HGRAPH hGraph, PPEER_RECORD pRecord, GUID *pRecordId);
  235. HRESULT WINAPI PeerGraphUpdateRecord (HGRAPH hGraph, PPEER_RECORD pRecord);
  236. HRESULT WINAPI PeerGraphDeleteRecord (HGRAPH hGraph, const GUID *pRecordId, WINBOOL fLocal);
  237. HRESULT WINAPI PeerGraphEnumRecords (HGRAPH hGraph, const GUID *pRecordType, PCWSTR pwzPeerId, HPEERENUM *phPeerEnum);
  238. HRESULT WINAPI PeerGraphSearchRecords (HGRAPH hGraph, PCWSTR pwzCriteria, HPEERENUM *phPeerEnum);
  239. HRESULT WINAPI PeerGraphExportDatabase (HGRAPH hGraph, PCWSTR pwzFilePath);
  240. HRESULT WINAPI PeerGraphImportDatabase (HGRAPH hGraph, PCWSTR pwzFilePath);
  241. HRESULT WINAPI PeerGraphValidateDeferredRecords (HGRAPH hGraph, ULONG cRecordIds, const GUID *pRecordIds);
  242. HRESULT WINAPI PeerGraphOpenDirectConnection (HGRAPH hGraph, PCWSTR pwzPeerId, PPEER_ADDRESS pAddress, ULONGLONG *pullConnectionId);
  243. HRESULT WINAPI PeerGraphSendData (HGRAPH hGraph, ULONGLONG ullConnectionId, const GUID *pType, ULONG cbData, PVOID pvData);
  244. HRESULT WINAPI PeerGraphCloseDirectConnection (HGRAPH hGraph, ULONGLONG ullConnectionId);
  245. HRESULT WINAPI PeerGraphEnumConnections (HGRAPH hGraph, DWORD dwFlags, HPEERENUM *phPeerEnum);
  246. HRESULT WINAPI PeerGraphEnumNodes (HGRAPH hGraph, PCWSTR pwzPeerId, HPEERENUM *phPeerEnum);
  247. HRESULT WINAPI PeerGraphSetPresence (HGRAPH hGraph, WINBOOL fPresent);
  248. HRESULT WINAPI PeerGraphGetNodeInfo (HGRAPH hGraph, ULONGLONG ullNodeId, PPEER_NODE_INFO *ppNodeInfo);
  249. HRESULT WINAPI PeerGraphSetNodeAttributes (HGRAPH hGraph, PCWSTR pwzAttributes);
  250. HRESULT WINAPI PeerGraphPeerTimeToUniversalTime (HGRAPH hGraph, FILETIME *pftPeerTime, FILETIME *pftUniversalTime);
  251. HRESULT WINAPI PeerGraphUniversalTimeToPeerTime (HGRAPH hGraph, FILETIME *pftUniversalTime, FILETIME *pftPeerTime);
  252. #endif
  253. #if !(defined (NO_P2P_GROUP) && defined (NO_P2P_IDENTITY)) && !defined (__WIDL__)
  254. #include <wincrypt.h>
  255. VOID WINAPI PeerFreeData (LPCVOID pvData);
  256. HRESULT WINAPI PeerGetItemCount (HPEERENUM hPeerEnum, ULONG *pCount);
  257. HRESULT WINAPI PeerGetNextItem (HPEERENUM hPeerEnum, ULONG *pCount, PVOID **pppvItems);
  258. HRESULT WINAPI PeerEndEnumeration (HPEERENUM hPeerEnum);
  259. #endif
  260. #ifndef NO_P2P_GROUP
  261. typedef PVOID HGROUP,*PHGROUP;
  262. typedef GUID PEER_ROLE_ID;
  263. #if NTDDI_VERSION >= 0x06000000
  264. #define PEER_GROUP_VERSION MAKEWORD (1, 1)
  265. #else
  266. #define PEER_GROUP_VERSION MAKEWORD (1, 0)
  267. #endif
  268. typedef enum peer_group_event_type_tag {
  269. PEER_GROUP_EVENT_STATUS_CHANGED = 1,
  270. PEER_GROUP_EVENT_PROPERTY_CHANGED = 2,
  271. PEER_GROUP_EVENT_RECORD_CHANGED = 3,
  272. PEER_GROUP_EVENT_DIRECT_CONNECTION = 4,
  273. PEER_GROUP_EVENT_NEIGHBOR_CONNECTION = 5,
  274. PEER_GROUP_EVENT_INCOMING_DATA = 6,
  275. PEER_GROUP_EVENT_MEMBER_CHANGED = 8,
  276. PEER_GROUP_EVENT_CONNECTION_FAILED = 10,
  277. PEER_GROUP_EVENT_AUTHENTICATION_FAILED = 11
  278. } PEER_GROUP_EVENT_TYPE;
  279. typedef enum peer_group_status_tag {
  280. PEER_GROUP_STATUS_LISTENING = 0x0001,
  281. PEER_GROUP_STATUS_HAS_CONNECTIONS = 0x0002,
  282. } PEER_GROUP_STATUS;
  283. typedef enum peer_group_property_flags_tag {
  284. PEER_MEMBER_DATA_OPTIONAL = 0x0001,
  285. PEER_DISABLE_PRESENCE = 0x0002,
  286. PEER_DEFER_EXPIRATION = 0x0004,
  287. } PEER_GROUP_PROPERTY_FLAGS;
  288. #if NTDDI_VERSION >= 0x06000000
  289. typedef enum peer_group_authentication_scheme_tag {
  290. PEER_GROUP_GMC_AUTHENTICATION = 0x00000001,
  291. PEER_GROUP_PASSWORD_AUTHENTICATION = 0x00000002,
  292. } PEER_GROUP_AUTHENTICATION_SCHEME;
  293. #endif
  294. typedef enum peer_member_flags_tag {
  295. PEER_MEMBER_PRESENT = 0x0001,
  296. } PEER_MEMBER_FLAGS;
  297. typedef enum peer_member_change_type_tag {
  298. PEER_MEMBER_CONNECTED = 1,
  299. PEER_MEMBER_DISCONNECTED = 2,
  300. PEER_MEMBER_UPDATED = 3,
  301. PEER_MEMBER_JOINED = 4,
  302. PEER_MEMBER_LEFT = 5,
  303. } PEER_MEMBER_CHANGE_TYPE;
  304. typedef enum peer_issue_credential_flags_tag {
  305. PEER_GROUP_STORE_CREDENTIALS = 0x0001,
  306. } PEER_GROUP_ISSUE_CREDENTIAL_FLAGS;
  307. #ifndef __WIDL__
  308. typedef struct peer_credential_info_tag {
  309. DWORD dwSize;
  310. DWORD dwFlags;
  311. PWSTR pwzFriendlyName;
  312. CERT_PUBLIC_KEY_INFO *pPublicKey;
  313. PWSTR pwzIssuerPeerName;
  314. PWSTR pwzIssuerFriendlyName;
  315. FILETIME ftValidityStart;
  316. FILETIME ftValidityEnd;
  317. ULONG cRoles;
  318. PEER_ROLE_ID *pRoles;
  319. } PEER_CREDENTIAL_INFO,*PPEER_CREDENTIAL_INFO;
  320. typedef struct peer_member_tag {
  321. DWORD dwSize;
  322. DWORD dwFlags;
  323. PWSTR pwzIdentity;
  324. PWSTR pwzAttributes;
  325. ULONGLONG ullNodeId;
  326. ULONG cAddresses;
  327. PEER_ADDRESS *pAddresses;
  328. PEER_CREDENTIAL_INFO *pCredentialInfo;
  329. } PEER_MEMBER,*PPEER_MEMBER;
  330. typedef struct peer_invitation_info_tag {
  331. DWORD dwSize;
  332. DWORD dwFlags;
  333. PWSTR pwzCloudName;
  334. DWORD dwScope;
  335. DWORD dwCloudFlags;
  336. PWSTR pwzGroupPeerName;
  337. PWSTR pwzIssuerPeerName;
  338. PWSTR pwzSubjectPeerName;
  339. PWSTR pwzGroupFriendlyName;
  340. PWSTR pwzIssuerFriendlyName;
  341. PWSTR pwzSubjectFriendlyName;
  342. FILETIME ftValidityStart;
  343. FILETIME ftValidityEnd;
  344. ULONG cRoles;
  345. PEER_ROLE_ID *pRoles;
  346. ULONG cClassifiers;
  347. PWSTR *ppwzClassifiers;
  348. CERT_PUBLIC_KEY_INFO *pSubjectPublicKey;
  349. #if NTDDI_VERSION >= 0x06000000
  350. PEER_GROUP_AUTHENTICATION_SCHEME authScheme;
  351. #endif
  352. } PEER_INVITATION_INFO,*PPEER_INVITATION_INFO;
  353. #endif
  354. typedef struct peer_group_properties_tag {
  355. DWORD dwSize;
  356. DWORD dwFlags;
  357. PWSTR pwzCloud;
  358. PWSTR pwzClassifier;
  359. PWSTR pwzGroupPeerName;
  360. PWSTR pwzCreatorPeerName;
  361. PWSTR pwzFriendlyName;
  362. PWSTR pwzComment;
  363. ULONG ulMemberDataLifetime;
  364. ULONG ulPresenceLifetime;
  365. #if NTDDI_VERSION >= 0x06000000
  366. DWORD dwAuthenticationSchemes;
  367. PWSTR pwzGroupPassword;
  368. PEER_ROLE_ID groupPasswordRole;
  369. #endif
  370. } PEER_GROUP_PROPERTIES,*PPEER_GROUP_PROPERTIES;
  371. typedef struct peer_event_member_change_data_tag {
  372. DWORD dwSize;
  373. PEER_MEMBER_CHANGE_TYPE changeType;
  374. PWSTR pwzIdentity;
  375. } PEER_EVENT_MEMBER_CHANGE_DATA,*PPEER_EVENT_MEMBER_CHANGE_DATA;
  376. typedef struct peer_group_event_registration_tag {
  377. PEER_GROUP_EVENT_TYPE eventType;
  378. GUID *pType;
  379. } PEER_GROUP_EVENT_REGISTRATION,*PPEER_GROUP_EVENT_REGISTRATION;
  380. #ifdef __WIDL__
  381. typedef struct peer_group_event_data_tag {
  382. PEER_GROUP_EVENT_TYPE eventType;
  383. [switch_is (eventType)] union {
  384. [case (PEER_GROUP_EVENT_STATUS_CHANGED)] PEER_GROUP_STATUS dwStatus;
  385. [case (PEER_GROUP_EVENT_PROPERTY_CHANGED)] ;
  386. [case (PEER_GROUP_EVENT_RECORD_CHANGED)] PEER_EVENT_RECORD_CHANGE_DATA recordChangeData;
  387. [case (PEER_GROUP_EVENT_NEIGHBOR_CONNECTION, PEER_GROUP_EVENT_DIRECT_CONNECTION)] PEER_EVENT_CONNECTION_CHANGE_DATA connectionChangeData;
  388. [case (PEER_GROUP_EVENT_INCOMING_DATA)] PEER_EVENT_INCOMING_DATA incomingData;
  389. [case (PEER_GROUP_EVENT_MEMBER_CHANGED)] PEER_EVENT_MEMBER_CHANGE_DATA memberChangeData;
  390. [case (PEER_GROUP_EVENT_CONNECTION_FAILED)] HRESULT hrConnectionFailedReason;
  391. [default] ;
  392. };
  393. } PEER_GROUP_EVENT_DATA,*PPEER_GROUP_EVENT_DATA;
  394. #else
  395. typedef struct peer_group_event_data_tag {
  396. PEER_GROUP_EVENT_TYPE eventType;
  397. __C89_NAMELESS union {
  398. PEER_GROUP_STATUS dwStatus;
  399. PEER_EVENT_INCOMING_DATA incomingData;
  400. PEER_EVENT_RECORD_CHANGE_DATA recordChangeData;
  401. PEER_EVENT_CONNECTION_CHANGE_DATA connectionChangeData;
  402. PEER_EVENT_MEMBER_CHANGE_DATA memberChangeData;
  403. HRESULT hrConnectionFailedReason;
  404. };
  405. } PEER_GROUP_EVENT_DATA,*PPEER_GROUP_EVENT_DATA;
  406. #endif
  407. typedef struct peer_name_pair_tag {
  408. DWORD dwSize;
  409. PWSTR pwzPeerName;
  410. PWSTR pwzFriendlyName;
  411. } PEER_NAME_PAIR,*PPEER_NAME_PAIR;
  412. #ifndef __WIDL__
  413. HRESULT WINAPI PeerGroupStartup (WORD wVersionRequested, PPEER_VERSION_DATA pVersionData);
  414. HRESULT WINAPI PeerGroupShutdown ();
  415. HRESULT WINAPI PeerGroupCreate (PPEER_GROUP_PROPERTIES pProperties, HGROUP *phGroup);
  416. HRESULT WINAPI PeerGroupOpen (PCWSTR pwzIdentity, PCWSTR pwzGroupPeerName, PCWSTR pwzCloud, HGROUP *phGroup);
  417. HRESULT WINAPI PeerGroupJoin (PCWSTR pwzIdentity, PCWSTR pwzInvitation, PCWSTR pwzCloud, HGROUP *phGroup);
  418. HRESULT WINAPI PeerGroupConnect (HGROUP hGroup);
  419. HRESULT WINAPI PeerGroupClose (HGROUP hGroup);
  420. HRESULT WINAPI PeerGroupDelete (PCWSTR pwzIdentity, PCWSTR pwzGroupPeerName);
  421. HRESULT WINAPI PeerGroupCreateInvitation (HGROUP hGroup, PCWSTR pwzIdentityInfo, FILETIME *pftExpiration, ULONG cRoles, const GUID *pRoles, PWSTR *ppwzInvitation);
  422. HRESULT WINAPI PeerGroupParseInvitation (PCWSTR pwzInvitation, PPEER_INVITATION_INFO *ppInvitationInfo);
  423. HRESULT WINAPI PeerGroupGetStatus (HGROUP hGroup, DWORD *pdwStatus);
  424. HRESULT WINAPI PeerGroupGetProperties (HGROUP hGroup, PPEER_GROUP_PROPERTIES *ppProperties);
  425. HRESULT WINAPI PeerGroupSetProperties (HGROUP hGroup, PPEER_GROUP_PROPERTIES pProperties);
  426. HRESULT WINAPI PeerGroupEnumMembers (HGROUP hGroup, DWORD dwFlags, PCWSTR pwzIdentity, HPEERENUM *phPeerEnum);
  427. HRESULT WINAPI PeerGroupOpenDirectConnection (HGROUP hGroup, PCWSTR pwzIdentity, PPEER_ADDRESS pAddress, ULONGLONG *pullConnectionId);
  428. HRESULT WINAPI PeerGroupCloseDirectConnection (HGROUP hGroup, ULONGLONG ullConnectionId);
  429. HRESULT WINAPI PeerGroupEnumConnections (HGROUP hGroup, DWORD dwFlags, HPEERENUM *phPeerEnum);
  430. HRESULT WINAPI PeerGroupSendData (HGROUP hGroup, ULONGLONG ullConnectionId, const GUID *pType, ULONG cbData, PVOID pvData);
  431. HRESULT WINAPI PeerGroupRegisterEvent (HGROUP hGroup, HANDLE hEvent, DWORD cEventRegistration, PEER_GROUP_EVENT_REGISTRATION *pEventRegistrations, HPEEREVENT *phPeerEvent);
  432. HRESULT WINAPI PeerGroupUnregisterEvent (HPEEREVENT hPeerEvent);
  433. HRESULT WINAPI PeerGroupGetEventData (HPEEREVENT hPeerEvent, PPEER_GROUP_EVENT_DATA *ppEventData);
  434. HRESULT WINAPI PeerGroupGetRecord (HGROUP hGroup, const GUID *pRecordId, PPEER_RECORD *ppRecord);
  435. HRESULT WINAPI PeerGroupAddRecord (HGROUP hGroup, PPEER_RECORD pRecord, GUID *pRecordId);
  436. HRESULT WINAPI PeerGroupUpdateRecord (HGROUP hGroup, PPEER_RECORD pRecord);
  437. HRESULT WINAPI PeerGroupDeleteRecord (HGROUP hGroup, const GUID *pRecordId);
  438. HRESULT WINAPI PeerGroupEnumRecords (HGROUP hGroup, const GUID *pRecordType, HPEERENUM *phPeerEnum);
  439. HRESULT WINAPI PeerGroupSearchRecords (HGROUP hGroup, PCWSTR pwzCriteria, HPEERENUM *phPeerEnum);
  440. HRESULT WINAPI PeerGroupExportDatabase (HGROUP hGroup, PCWSTR pwzFilePath);
  441. HRESULT WINAPI PeerGroupImportDatabase (HGROUP hGroup, PCWSTR pwzFilePath);
  442. HRESULT WINAPI PeerGroupIssueCredentials (HGROUP hGroup, PCWSTR pwzSubjectIdentity, PEER_CREDENTIAL_INFO *pCredentialInfo, DWORD dwFlags, PWSTR *ppwzInvitation);
  443. HRESULT WINAPI PeerGroupExportConfig (HGROUP hGroup, PCWSTR pwzPassword, PWSTR *ppwzXML);
  444. HRESULT WINAPI PeerGroupImportConfig (PCWSTR pwzXML, PCWSTR pwzPassword, WINBOOL fOverwrite, PWSTR *ppwzIdentity, PWSTR *ppwzGroup);
  445. HRESULT WINAPI PeerGroupPeerTimeToUniversalTime (HGROUP hGroup, FILETIME *pftPeerTime, FILETIME *pftUniversalTime);
  446. HRESULT WINAPI PeerGroupUniversalTimeToPeerTime (HGROUP hGroup, FILETIME *pftUniversalTime, FILETIME *pftPeerTime);
  447. #if NTDDI_VERSION >= 0x06000000
  448. HRESULT WINAPI PeerGroupPasswordJoin (PCWSTR pwzIdentity, PCWSTR pwzInvitation, PCWSTR pwzPassword, PCWSTR pwzCloud, HGROUP *phGroup);
  449. HRESULT WINAPI PeerGroupConnectByAddress (HGROUP hGroup, ULONG cAddresses, PPEER_ADDRESS pAddresses);
  450. HRESULT WINAPI PeerGroupCreatePasswordInvitation (HGROUP hGroup, PWSTR *ppwzInvitation);
  451. #endif
  452. #if NTDDI_VERSION >= 0x06010000
  453. HRESULT WINAPI PeerGroupResumePasswordAuthentication (HGROUP hGroup, HPEEREVENT hPeerEventHandle);
  454. #endif
  455. #endif
  456. #endif
  457. #if !defined (NO_P2P_IDENTITY) && !defined (__WIDL__)
  458. HRESULT WINAPI PeerIdentityCreate (PCWSTR pwzClassifier, PCWSTR pwzFriendlyName, HCRYPTPROV hCryptProv, PWSTR *ppwzIdentity);
  459. HRESULT WINAPI PeerIdentityGetFriendlyName (PCWSTR pwzIdentity, PWSTR *ppwzFriendlyName);
  460. HRESULT WINAPI PeerIdentitySetFriendlyName (PCWSTR pwzIdentity, PCWSTR pwzFriendlyName);
  461. HRESULT WINAPI PeerIdentityGetCryptKey (PCWSTR pwzIdentity, HCRYPTPROV *phCryptProv);
  462. HRESULT WINAPI PeerIdentityDelete (PCWSTR pwzIdentity);
  463. HRESULT WINAPI PeerEnumIdentities (HPEERENUM *phPeerEnum);
  464. HRESULT WINAPI PeerEnumGroups (PCWSTR pwzIdentity, HPEERENUM *phPeerEnum);
  465. HRESULT WINAPI PeerCreatePeerName (PCWSTR pwzIdentity, PCWSTR pwzClassifier, PWSTR *ppwzPeerName);
  466. HRESULT WINAPI PeerIdentityGetXML (PCWSTR pwzIdentity, PWSTR *ppwzIdentityXML);
  467. HRESULT WINAPI PeerIdentityExport (PCWSTR pwzIdentity, PCWSTR pwzPassword, PWSTR *ppwzExportXML);
  468. HRESULT WINAPI PeerIdentityImport (PCWSTR pwzImportXML, PCWSTR pwzPassword, PWSTR *ppwzIdentity);
  469. HRESULT WINAPI PeerIdentityGetDefault (PWSTR *ppwzPeerName);
  470. #endif
  471. #ifndef NO_P2P_COLLABORATION
  472. #define PEER_COLLAB_VERSION MAKEWORD (1, 0)
  473. typedef enum peer_signin_flags_tag {
  474. PEER_SIGNIN_NONE = 0x0,
  475. PEER_SIGNIN_NEAR_ME = 0x1,
  476. PEER_SIGNIN_INTERNET = 0x2,
  477. PEER_SIGNIN_ALL = PEER_SIGNIN_INTERNET | PEER_SIGNIN_NEAR_ME
  478. } PEER_SIGNIN_FLAGS;
  479. typedef enum peer_watch_permission_tag {
  480. PEER_WATCH_BLOCKED = 0,
  481. PEER_WATCH_ALLOWED = 1
  482. } PEER_WATCH_PERMISSION;
  483. typedef enum peer_publication_scope_tag {
  484. PEER_PUBLICATION_SCOPE_NONE = 0x0,
  485. PEER_PUBLICATION_SCOPE_NEAR_ME = 0x1,
  486. PEER_PUBLICATION_SCOPE_INTERNET = 0x2,
  487. PEER_PUBLICATION_SCOPE_ALL = PEER_PUBLICATION_SCOPE_NEAR_ME | PEER_PUBLICATION_SCOPE_INTERNET
  488. } PEER_PUBLICATION_SCOPE;
  489. typedef struct peer_application_tag {
  490. GUID id;
  491. PEER_DATA data;
  492. PWSTR pwzDescription;
  493. } PEER_APPLICATION,*PPEER_APPLICATION;
  494. typedef const PEER_APPLICATION *PCPEER_APPLICATION;
  495. typedef struct peer_object_tag {
  496. GUID id;
  497. PEER_DATA data;
  498. DWORD dwPublicationScope;
  499. } PEER_OBJECT,*PPEER_OBJECT;
  500. typedef const PEER_OBJECT *PCPEER_OBJECT;
  501. typedef struct peer_contact_tag {
  502. PWSTR pwzPeerName;
  503. PWSTR pwzNickName;
  504. PWSTR pwzDisplayName;
  505. PWSTR pwzEmailAddress;
  506. WINBOOL fWatch;
  507. PEER_WATCH_PERMISSION WatcherPermissions;
  508. PEER_DATA credentials;
  509. } PEER_CONTACT,*PPEER_CONTACT;
  510. typedef const PEER_CONTACT *PCPEER_CONTACT;
  511. typedef struct peer_endpoint_tag {
  512. PEER_ADDRESS address;
  513. PWSTR pwzEndpointName;
  514. } PEER_ENDPOINT,*PPEER_ENDPOINT;
  515. typedef const PEER_ENDPOINT *PCPEER_ENDPOINT;
  516. typedef struct peer_people_near_me_tag {
  517. PWSTR pwzNickName;
  518. PEER_ENDPOINT endpoint;
  519. GUID id;
  520. } PEER_PEOPLE_NEAR_ME,*PPEER_PEOPLE_NEAR_ME;
  521. typedef const PEER_PEOPLE_NEAR_ME *PCPEER_PEOPLE_NEAR_ME;
  522. typedef PPEER_PEOPLE_NEAR_ME *PPPEER_PEOPLE_NEAR_ME;
  523. #ifndef __WIDL__
  524. HRESULT WINAPI PeerCollabStartup (WORD wVersionRequested);
  525. HRESULT WINAPI PeerCollabShutdown ();
  526. HRESULT WINAPI PeerCollabSignin (HWND hwndParent, DWORD dwSigninOptions);
  527. HRESULT WINAPI PeerCollabSignout (DWORD dwSigninOptions);
  528. HRESULT WINAPI PeerCollabGetSigninOptions (DWORD *pdwSigninOptions);
  529. #endif
  530. typedef enum peer_invitation_response_type_tag {
  531. PEER_INVITATION_RESPONSE_DECLINED = 0,
  532. PEER_INVITATION_RESPONSE_ACCEPTED = 1,
  533. PEER_INVITATION_RESPONSE_EXPIRED = 2,
  534. PEER_INVITATION_RESPONSE_ERROR = 3
  535. } PEER_INVITATION_RESPONSE_TYPE;
  536. typedef enum peer_application_registration_type_tag {
  537. PEER_APPLICATION_CURRENT_USER = 0,
  538. PEER_APPLICATION_ALL_USERS = 1
  539. } PEER_APPLICATION_REGISTRATION_TYPE;
  540. typedef struct peer_invitation_tag {
  541. GUID applicationId;
  542. PEER_DATA applicationData;
  543. PWSTR pwzMessage;
  544. } PEER_INVITATION,*PPEER_INVITATION;
  545. typedef const PEER_INVITATION *PCPEER_INVITATION;
  546. typedef struct peer_invitation_response_tag {
  547. PEER_INVITATION_RESPONSE_TYPE action;
  548. PWSTR pwzMessage;
  549. HRESULT hrExtendedInfo;
  550. } PEER_INVITATION_RESPONSE,*PPEER_INVITATION_RESPONSE;
  551. typedef const PEER_INVITATION_RESPONSE *PCPEER_INVITATION_RESPONSE;
  552. typedef struct peer_app_launch_info_tag {
  553. PPEER_CONTACT pContact;
  554. PPEER_ENDPOINT pEndpoint;
  555. PPEER_INVITATION pInvitation;
  556. } PEER_APP_LAUNCH_INFO,*PPEER_APP_LAUNCH_INFO;
  557. typedef const PEER_APP_LAUNCH_INFO *PCPEER_APP_LAUNCH_INFO;
  558. typedef struct peer_application_registration_info_tag {
  559. PEER_APPLICATION application;
  560. PWSTR pwzApplicationToLaunch;
  561. PWSTR pwzApplicationArguments;
  562. DWORD dwPublicationScope;
  563. } PEER_APPLICATION_REGISTRATION_INFO,*PPEER_APPLICATION_REGISTRATION_INFO;
  564. typedef const PEER_APPLICATION_REGISTRATION_INFO *PCPEER_APPLICATION_REGISTRATION_INFO;
  565. #ifndef __WIDL__
  566. HRESULT WINAPI PeerCollabAsyncInviteContact (PCPEER_CONTACT pcContact, PCPEER_ENDPOINT pcEndpoint, PCPEER_INVITATION pcInvitation, HANDLE hEvent, HANDLE *phInvitation);
  567. HRESULT WINAPI PeerCollabGetInvitationResponse (HANDLE hInvitation, PPEER_INVITATION_RESPONSE *ppInvitationResponse);
  568. HRESULT WINAPI PeerCollabCancelInvitation (HANDLE hInvitation);
  569. HRESULT WINAPI PeerCollabCloseHandle (HANDLE hInvitation);
  570. HRESULT WINAPI PeerCollabInviteContact (PCPEER_CONTACT pcContact, PCPEER_ENDPOINT pcEndpoint, PCPEER_INVITATION pcInvitation, PPEER_INVITATION_RESPONSE *ppResponse);
  571. HRESULT WINAPI PeerCollabAsyncInviteEndpoint (PCPEER_ENDPOINT pcEndpoint, PCPEER_INVITATION pcInvitation, HANDLE hEvent, HANDLE *phInvitation);
  572. HRESULT WINAPI PeerCollabInviteEndpoint (PCPEER_ENDPOINT pcEndpoint, PCPEER_INVITATION pcInvitation, PPEER_INVITATION_RESPONSE *ppResponse);
  573. HRESULT WINAPI PeerCollabGetAppLaunchInfo (PPEER_APP_LAUNCH_INFO *ppLaunchInfo);
  574. HRESULT WINAPI PeerCollabRegisterApplication (PCPEER_APPLICATION_REGISTRATION_INFO pcApplication, PEER_APPLICATION_REGISTRATION_TYPE registrationType);
  575. HRESULT WINAPI PeerCollabUnregisterApplication (const GUID *pApplicationId, PEER_APPLICATION_REGISTRATION_TYPE registrationType);
  576. HRESULT WINAPI PeerCollabGetApplicationRegistrationInfo (const GUID *pApplicationId, PEER_APPLICATION_REGISTRATION_TYPE registrationType, PPEER_APPLICATION_REGISTRATION_INFO *ppApplication);
  577. HRESULT WINAPI PeerCollabEnumApplicationRegistrationInfo (PEER_APPLICATION_REGISTRATION_TYPE registrationType, HPEERENUM *phPeerEnum);
  578. #endif
  579. typedef enum peer_presence_status_tag {
  580. PEER_PRESENCE_OFFLINE = 0,
  581. PEER_PRESENCE_OUT_TO_LUNCH = 1,
  582. PEER_PRESENCE_AWAY = 2,
  583. PEER_PRESENCE_BE_RIGHT_BACK = 3,
  584. PEER_PRESENCE_IDLE = 4,
  585. PEER_PRESENCE_BUSY = 5,
  586. PEER_PRESENCE_ON_THE_PHONE = 6,
  587. PEER_PRESENCE_ONLINE = 7
  588. } PEER_PRESENCE_STATUS;
  589. typedef struct peer_presence_info_tag {
  590. PEER_PRESENCE_STATUS status;
  591. PWSTR pwzDescriptiveText;
  592. } PEER_PRESENCE_INFO,*PPEER_PRESENCE_INFO;
  593. typedef const PEER_PRESENCE_INFO *PCPEER_PRESENCE_INFO;
  594. #ifndef __WIDL__
  595. HRESULT WINAPI PeerCollabGetPresenceInfo (PCPEER_ENDPOINT pcEndpoint, PPEER_PRESENCE_INFO *ppPresenceInfo);
  596. HRESULT WINAPI PeerCollabEnumApplications (PCPEER_ENDPOINT pcEndpoint, const GUID *pApplicationId, HPEERENUM *phPeerEnum);
  597. HRESULT WINAPI PeerCollabEnumObjects (PCPEER_ENDPOINT pcEndpoint, const GUID *pObjectId, HPEERENUM *phPeerEnum);
  598. HRESULT WINAPI PeerCollabEnumEndpoints (PCPEER_CONTACT pcContact, HPEERENUM *phPeerEnum);
  599. HRESULT WINAPI PeerCollabRefreshEndpointData (PCPEER_ENDPOINT pcEndpoint);
  600. HRESULT WINAPI PeerCollabDeleteEndpointData (PCPEER_ENDPOINT pcEndpoint);
  601. HRESULT WINAPI PeerCollabQueryContactData (PCPEER_ENDPOINT pcEndpoint, PWSTR *ppwzContactData);
  602. HRESULT WINAPI PeerCollabSubscribeEndpointData (const PCPEER_ENDPOINT pcEndpoint);
  603. HRESULT WINAPI PeerCollabUnsubscribeEndpointData (const PCPEER_ENDPOINT pcEndpoint);
  604. HRESULT WINAPI PeerCollabSetPresenceInfo (PCPEER_PRESENCE_INFO pcPresenceInfo);
  605. HRESULT WINAPI PeerCollabGetEndpointName (PWSTR *ppwzEndpointName);
  606. HRESULT WINAPI PeerCollabSetEndpointName (PCWSTR pwzEndpointName);
  607. HRESULT WINAPI PeerCollabSetObject (PCPEER_OBJECT pcObject);
  608. HRESULT WINAPI PeerCollabDeleteObject (const GUID *pObjectId);
  609. #endif
  610. typedef enum peer_change_type_tag {
  611. PEER_CHANGE_ADDED = 0,
  612. PEER_CHANGE_DELETED = 1,
  613. PEER_CHANGE_UPDATED = 2
  614. } PEER_CHANGE_TYPE;
  615. typedef enum peer_collab_event_type_tag {
  616. PEER_EVENT_WATCHLIST_CHANGED = 1,
  617. PEER_EVENT_ENDPOINT_CHANGED = 2,
  618. PEER_EVENT_ENDPOINT_PRESENCE_CHANGED = 3,
  619. PEER_EVENT_ENDPOINT_APPLICATION_CHANGED = 4,
  620. PEER_EVENT_ENDPOINT_OBJECT_CHANGED = 5,
  621. PEER_EVENT_MY_ENDPOINT_CHANGED = 6,
  622. PEER_EVENT_MY_PRESENCE_CHANGED = 7,
  623. PEER_EVENT_MY_APPLICATION_CHANGED = 8,
  624. PEER_EVENT_MY_OBJECT_CHANGED = 9,
  625. PEER_EVENT_PEOPLE_NEAR_ME_CHANGED = 10,
  626. PEER_EVENT_REQUEST_STATUS_CHANGED = 11
  627. } PEER_COLLAB_EVENT_TYPE;
  628. typedef struct peer_collab_event_registration_tag {
  629. PEER_COLLAB_EVENT_TYPE eventType;
  630. #ifdef __WIDL__
  631. [unique]
  632. #endif
  633. GUID *pInstance;
  634. } PEER_COLLAB_EVENT_REGISTRATION,*PPEER_COLLAB_EVENT_REGISTRATION;
  635. typedef struct peer_event_watchlist_changed_data_tag {
  636. PPEER_CONTACT pContact;
  637. PEER_CHANGE_TYPE changeType;
  638. } PEER_EVENT_WATCHLIST_CHANGED_DATA,*PPEER_EVENT_WATCHLIST_CHANGED_DATA;
  639. typedef struct peer_event_presence_changed_data_tag {
  640. PPEER_CONTACT pContact;
  641. PPEER_ENDPOINT pEndpoint;
  642. PEER_CHANGE_TYPE changeType;
  643. PPEER_PRESENCE_INFO pPresenceInfo;
  644. } PEER_EVENT_PRESENCE_CHANGED_DATA,*PPEER_EVENT_PRESENCE_CHANGED_DATA;
  645. typedef struct peer_event_application_changed_data_tag {
  646. PPEER_CONTACT pContact;
  647. PPEER_ENDPOINT pEndpoint;
  648. PEER_CHANGE_TYPE changeType;
  649. PPEER_APPLICATION pApplication;
  650. } PEER_EVENT_APPLICATION_CHANGED_DATA,*PPEER_EVENT_APPLICATION_CHANGED_DATA;
  651. typedef struct peer_event_object_changed_data_tag {
  652. PPEER_CONTACT pContact;
  653. PPEER_ENDPOINT pEndpoint;
  654. PEER_CHANGE_TYPE changeType;
  655. PPEER_OBJECT pObject;
  656. } PEER_EVENT_OBJECT_CHANGED_DATA,*PPEER_EVENT_OBJECT_CHANGED_DATA;
  657. typedef struct peer_event_endpoint_changed_data_tag {
  658. PPEER_CONTACT pContact;
  659. PPEER_ENDPOINT pEndpoint;
  660. } PEER_EVENT_ENDPOINT_CHANGED_DATA,*PPEER_EVENT_ENDPOINT_CHANGED_DATA;
  661. typedef struct peer_event_people_near_me_changed_data_tag {
  662. PEER_CHANGE_TYPE changeType;
  663. PPEER_PEOPLE_NEAR_ME pPeopleNearMe;
  664. } PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA,*PPEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA;
  665. typedef struct peer_event_request_status_changed_data_tag {
  666. PPEER_ENDPOINT pEndpoint;
  667. HRESULT hrChange;
  668. } PEER_EVENT_REQUEST_STATUS_CHANGED_DATA,*PPEER_EVENT_REQUEST_STATUS_CHANGED_DATA;
  669. #ifdef __WIDL__
  670. typedef struct peer_collab_event_data_tag {
  671. PEER_COLLAB_EVENT_TYPE eventType;
  672. [switch_is (eventType)]
  673. union {
  674. [case (PEER_EVENT_WATCHLIST_CHANGED)] PEER_EVENT_WATCHLIST_CHANGED_DATA watchListChangedData;
  675. [case (PEER_EVENT_ENDPOINT_PRESENCE_CHANGED, PEER_EVENT_MY_PRESENCE_CHANGED)] PEER_EVENT_PRESENCE_CHANGED_DATA presenceChangedData;
  676. [case (PEER_EVENT_ENDPOINT_APPLICATION_CHANGED, PEER_EVENT_MY_APPLICATION_CHANGED)] PEER_EVENT_APPLICATION_CHANGED_DATA applicationChangedData;
  677. [case (PEER_EVENT_ENDPOINT_OBJECT_CHANGED, PEER_EVENT_MY_OBJECT_CHANGED)] PEER_EVENT_OBJECT_CHANGED_DATA objectChangedData;
  678. [case (PEER_EVENT_ENDPOINT_CHANGED, PEER_EVENT_MY_ENDPOINT_CHANGED)] PEER_EVENT_ENDPOINT_CHANGED_DATA endpointChangedData;
  679. [case (PEER_EVENT_PEOPLE_NEAR_ME_CHANGED)] PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA peopleNearMeChangedData;
  680. [case (PEER_EVENT_REQUEST_STATUS_CHANGED)] PEER_EVENT_REQUEST_STATUS_CHANGED_DATA requestStatusChangedData;
  681. [default] ;
  682. };
  683. } PEER_COLLAB_EVENT_DATA,*PPEER_COLLAB_EVENT_DATA;
  684. #else
  685. typedef struct peer_collab_event_data_tag {
  686. PEER_COLLAB_EVENT_TYPE eventType;
  687. __C89_NAMELESS union {
  688. PEER_EVENT_WATCHLIST_CHANGED_DATA watchListChangedData;
  689. PEER_EVENT_PRESENCE_CHANGED_DATA presenceChangedData;
  690. PEER_EVENT_APPLICATION_CHANGED_DATA applicationChangedData;
  691. PEER_EVENT_OBJECT_CHANGED_DATA objectChangedData;
  692. PEER_EVENT_ENDPOINT_CHANGED_DATA endpointChangedData;
  693. PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA peopleNearMeChangedData;
  694. PEER_EVENT_REQUEST_STATUS_CHANGED_DATA requestStatusChangedData;
  695. };
  696. } PEER_COLLAB_EVENT_DATA,*PPEER_COLLAB_EVENT_DATA;
  697. HRESULT WINAPI PeerCollabRegisterEvent (HANDLE hEvent, DWORD cEventRegistration, PEER_COLLAB_EVENT_REGISTRATION *pEventRegistrations, HPEEREVENT *phPeerEvent);
  698. HRESULT WINAPI PeerCollabGetEventData (HPEEREVENT hPeerEvent, PPEER_COLLAB_EVENT_DATA *ppEventData);
  699. HRESULT WINAPI PeerCollabUnregisterEvent (HPEEREVENT hPeerEvent);
  700. HRESULT WINAPI PeerCollabEnumPeopleNearMe (HPEERENUM *phPeerEnum);
  701. HRESULT WINAPI PeerCollabAddContact (PCWSTR pwzContactData, PPEER_CONTACT *ppContact);
  702. HRESULT WINAPI PeerCollabDeleteContact (PCWSTR pwzPeerName);
  703. HRESULT WINAPI PeerCollabGetContact (PCWSTR pwzPeerName, PPEER_CONTACT *ppContact);
  704. HRESULT WINAPI PeerCollabUpdateContact (PCPEER_CONTACT pContact);
  705. HRESULT WINAPI PeerCollabEnumContacts (HPEERENUM *phPeerEnum);
  706. HRESULT WINAPI PeerCollabExportContact (PCWSTR pwzPeerName, PWSTR *ppwzContactData);
  707. HRESULT WINAPI PeerCollabParseContact (PCWSTR pwzContactData, PPEER_CONTACT *ppContact);
  708. #endif
  709. #endif
  710. #if !defined (NO_P2P_PNRP) && !defined (__WIDL__)
  711. #define PNRP_VERSION MAKEWORD (2, 0)
  712. #define PEER_PNRP_ALL_LINK_CLOUDS L"PEER_PNRP_ALL_LINKS"
  713. #define PEER_PNRP_AUTO_ADDRESSES ((ULONG) (-1))
  714. typedef PVOID HRESOLUTION, HREGISTRATION;
  715. typedef struct peer_pnrp_endpoint_info_tag {
  716. PWSTR pwzPeerName;
  717. ULONG cAddresses;
  718. SOCKADDR **ppAddresses;
  719. PWSTR pwzComment;
  720. PEER_DATA payload;
  721. } PEER_PNRP_ENDPOINT_INFO,*PPEER_PNRP_ENDPOINT_INFO;
  722. typedef struct peer_pnrp_cloud_info_tag {
  723. PWSTR pwzCloudName;
  724. PNRP_SCOPE dwScope;
  725. DWORD dwScopeId;
  726. } PEER_PNRP_CLOUD_INFO,*PPEER_PNRP_CLOUD_INFO;
  727. typedef struct peer_pnrp_registration_info_tag {
  728. PWSTR pwzCloudName;
  729. PWSTR pwzPublishingIdentity;
  730. ULONG cAddresses;
  731. SOCKADDR **ppAddresses;
  732. WORD wPort;
  733. PWSTR pwzComment;
  734. PEER_DATA payload;
  735. } PEER_PNRP_REGISTRATION_INFO,*PPEER_PNRP_REGISTRATION_INFO;
  736. HRESULT WINAPI PeerNameToPeerHostName (PCWSTR pwzPeerName, PWSTR *ppwzHostName);
  737. HRESULT WINAPI PeerHostNameToPeerName (PCWSTR pwzHostName, PWSTR *ppwzPeerName);
  738. HRESULT WINAPI PeerPnrpStartup (WORD wVersionRequested);
  739. HRESULT WINAPI PeerPnrpShutdown ();
  740. HRESULT WINAPI PeerPnrpRegister (PCWSTR pcwzPeerName, PPEER_PNRP_REGISTRATION_INFO pRegistrationInfo, HREGISTRATION *phRegistration);
  741. HRESULT WINAPI PeerPnrpUpdateRegistration (HREGISTRATION hRegistration, PPEER_PNRP_REGISTRATION_INFO pRegistrationInfo);
  742. HRESULT WINAPI PeerPnrpUnregister (HREGISTRATION hRegistration);
  743. HRESULT WINAPI PeerPnrpResolve (PCWSTR pcwzPeerName, PCWSTR pcwzCloudName, ULONG *pcEndpoints, PPEER_PNRP_ENDPOINT_INFO *ppEndpoints);
  744. HRESULT WINAPI PeerPnrpStartResolve (PCWSTR pcwzPeerName, PCWSTR pcwzCloudName, ULONG cMaxEndpoints, HANDLE hEvent, HRESOLUTION *phResolve);
  745. HRESULT WINAPI PeerPnrpGetCloudInfo (ULONG *pcNumClouds, PPEER_PNRP_CLOUD_INFO *ppCloudInfo);
  746. HRESULT WINAPI PeerPnrpGetEndpoint (HRESOLUTION hResolve, PPEER_PNRP_ENDPOINT_INFO *ppEndpoint);
  747. HRESULT WINAPI PeerPnrpEndResolve (HRESOLUTION hResolve);
  748. #endif
  749. #ifdef __cplusplus
  750. }
  751. #endif
  752. #define WSA_PNRP_ERROR_BASE 11500
  753. #define WSA_PNRP_CLOUD_NOT_FOUND (WSA_PNRP_ERROR_BASE + 1)
  754. #define WSA_PNRP_CLOUD_DISABLED (WSA_PNRP_ERROR_BASE + 2)
  755. #define WSA_PNRP_INVALID_IDENTITY (WSA_PNRP_ERROR_BASE + 3)
  756. #define WSA_PNRP_TOO_MUCH_LOAD (WSA_PNRP_ERROR_BASE + 4)
  757. #define WSA_PNRP_CLOUD_IS_SEARCH_ONLY (WSA_PNRP_ERROR_BASE + 5)
  758. #define WSA_PNRP_CLIENT_INVALID_COMPARTMENT_ID (WSA_PNRP_ERROR_BASE + 6)
  759. #define WSA_PNRP_DUPLICATE_PEER_NAME (WSA_PNRP_ERROR_BASE + 8)
  760. #define WSA_PNRP_CLOUD_IS_DEAD (WSA_PNRP_ERROR_BASE + 9)
  761. #define PEER_E_CLOUD_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_CLOUD_NOT_FOUND)
  762. #define PEER_E_CLOUD_DISABLED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_CLOUD_DISABLED)
  763. #define PEER_E_INVALID_IDENTITY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_INVALID_IDENTITY)
  764. #define PEER_E_TOO_MUCH_LOAD MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_TOO_MUCH_LOAD)
  765. #define PEER_E_CLOUD_IS_SEARCH_ONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_CLOUD_IS_SEARCH_ONLY)
  766. #define PEER_E_CLIENT_INVALID_COMPARTMENT_ID MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_CLIENT_INVALID_COMPARTMENT_ID)
  767. #define PEER_E_DUPLICATE_PEER_NAME MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_DUPLICATE_PEER_NAME)
  768. #define PEER_E_CLOUD_IS_DEAD MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, WSA_PNRP_CLOUD_IS_DEAD)
  769. #define PEER_E_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND)
  770. #define PEER_E_DISK_FULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_DISK_FULL)
  771. #define PEER_E_ALREADY_EXISTS MAKE_HRESULT (SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_EXISTS)
  772. #endif
  773. #endif
  774. #ifdef DEFINE_GUID
  775. #ifndef NO_P2P_GROUP
  776. DEFINE_GUID (PEER_GROUP_ROLE_ADMIN, 0x04387127, 0xaa56, 0x450a, 0x8c, 0xe5, 0x4f, 0x56, 0x5c, 0x67, 0x90, 0xf4);
  777. DEFINE_GUID (PEER_GROUP_ROLE_MEMBER, 0xf12dc4c7, 0x0857, 0x4ca0, 0x93, 0xfc, 0xb1, 0xbb, 0x19, 0xa3, 0xd8, 0xc2);
  778. #if NTDDI_VERSION >= 0x06000000
  779. DEFINE_GUID (PEER_GROUP_ROLE_INVITING_MEMBER, 0x4370fd89, 0xdc18, 0x4cfb, 0x8d, 0xbf, 0x98, 0x53, 0xa8, 0xa9, 0xf9, 0x05);
  780. #endif
  781. #endif
  782. #ifndef NO_P2P_COLLABORATION
  783. DEFINE_GUID (PEER_COLLAB_OBJECTID_USER_PICTURE, 0xdd15f41f, 0xfc4e, 0x4922, 0xb0, 0x35, 0x4c, 0x06, 0xa7, 0x54, 0xd0, 0x1d);
  784. #endif
  785. #endif