source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/p2p.h@ 1167

Last change on this file since 1167 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

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