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 20 extern "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 884 DEFINE_GUID (PEER_GROUP_ROLE_ADMIN, 0x04387127, 0xaa56, 0x450a, 0x8c, 0xe5, 0x4f, 0x56, 0x5c, 0x67, 0x90, 0xf4); 885 DEFINE_GUID (PEER_GROUP_ROLE_MEMBER, 0xf12dc4c7, 0x0857, 0x4ca0, 0x93, 0xfc, 0xb1, 0xbb, 0x19, 0xa3, 0xd8, 0xc2); 886 #if NTDDI_VERSION >= 0x06000000 887 DEFINE_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 891 DEFINE_GUID (PEER_COLLAB_OBJECTID_USER_PICTURE, 0xdd15f41f, 0xfc4e, 0x4922, 0xb0, 0x35, 0x4c, 0x06, 0xa7, 0x54, 0xd0, 0x1d); 892 #endif 893 #endif 894