Initial implementation of P2P.dll

pull/161/head
dahall 2020-08-26 21:04:19 -06:00
parent b7d0a30276
commit d214434cda
13 changed files with 9956 additions and 0 deletions

View File

@ -0,0 +1,173 @@
## Correlation report for p2p.dll
PInvoke API (methods, structures and constants) imported from Windows P2P.dll.
### Methods (87% complete, 101 of 115 functions)
Native Method | Header | Managed Method
--- | --- | ---
[DllMain](https://www.google.com/search?num=5&q=DllMain+site%3Adocs.microsoft.com) | |
[PeerCollabAddContact](https://www.google.com/search?num=5&q=PeerCollabAddContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabAddContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabAddContact)
[PeerCollabAsyncInviteContact](https://www.google.com/search?num=5&q=PeerCollabAsyncInviteContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabAsyncInviteContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabAsyncInviteContact)
[PeerCollabAsyncInviteEndpoint](https://www.google.com/search?num=5&q=PeerCollabAsyncInviteEndpoint+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabAsyncInviteEndpoint](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabAsyncInviteEndpoint)
[PeerCollabCancelInvitation](https://www.google.com/search?num=5&q=PeerCollabCancelInvitation+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabCancelInvitation](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabCancelInvitation)
[PeerCollabCloseHandle](https://www.google.com/search?num=5&q=PeerCollabCloseHandle+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabCloseHandle](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabCloseHandle)
[PeerCollabDeleteContact](https://www.google.com/search?num=5&q=PeerCollabDeleteContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabDeleteContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabDeleteContact)
[PeerCollabDeleteEndpointData](https://www.google.com/search?num=5&q=PeerCollabDeleteEndpointData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabDeleteEndpointData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabDeleteEndpointData)
[PeerCollabDeleteObject](https://www.google.com/search?num=5&q=PeerCollabDeleteObject+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabDeleteObject](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabDeleteObject)
[PeerCollabEnumApplicationRegistrationInfo](https://www.google.com/search?num=5&q=PeerCollabEnumApplicationRegistrationInfo+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumApplicationRegistrationInfo](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumApplicationRegistrationInfo)
[PeerCollabEnumApplications](https://www.google.com/search?num=5&q=PeerCollabEnumApplications+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumApplications](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumApplications)
[PeerCollabEnumContacts](https://www.google.com/search?num=5&q=PeerCollabEnumContacts+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumContacts](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumContacts)
[PeerCollabEnumEndpoints](https://www.google.com/search?num=5&q=PeerCollabEnumEndpoints+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumEndpoints](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumEndpoints)
[PeerCollabEnumObjects](https://www.google.com/search?num=5&q=PeerCollabEnumObjects+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumObjects](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumObjects)
[PeerCollabEnumPeopleNearMe](https://www.google.com/search?num=5&q=PeerCollabEnumPeopleNearMe+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabEnumPeopleNearMe](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabEnumPeopleNearMe)
[PeerCollabExportContact](https://www.google.com/search?num=5&q=PeerCollabExportContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabExportContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabExportContact)
[PeerCollabGetAppLaunchInfo](https://www.google.com/search?num=5&q=PeerCollabGetAppLaunchInfo+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetAppLaunchInfo](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetAppLaunchInfo)
[PeerCollabGetApplicationRegistrationInfo](https://www.google.com/search?num=5&q=PeerCollabGetApplicationRegistrationInfo+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetApplicationRegistrationInfo](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetApplicationRegistrationInfo)
[PeerCollabGetContact](https://www.google.com/search?num=5&q=PeerCollabGetContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetContact)
[PeerCollabGetEndpointName](https://www.google.com/search?num=5&q=PeerCollabGetEndpointName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetEndpointName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetEndpointName)
[PeerCollabGetEventData](https://www.google.com/search?num=5&q=PeerCollabGetEventData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetEventData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetEventData)
[PeerCollabGetInvitationResponse](https://www.google.com/search?num=5&q=PeerCollabGetInvitationResponse+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetInvitationResponse](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetInvitationResponse)
[PeerCollabGetPresenceInfo](https://www.google.com/search?num=5&q=PeerCollabGetPresenceInfo+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetPresenceInfo](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetPresenceInfo)
[PeerCollabGetSigninOptions](https://www.google.com/search?num=5&q=PeerCollabGetSigninOptions+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabGetSigninOptions](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabGetSigninOptions)
[PeerCollabInviteContact](https://www.google.com/search?num=5&q=PeerCollabInviteContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabInviteContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabInviteContact)
[PeerCollabInviteEndpoint](https://www.google.com/search?num=5&q=PeerCollabInviteEndpoint+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabInviteEndpoint](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabInviteEndpoint)
[PeerCollabParseContact](https://www.google.com/search?num=5&q=PeerCollabParseContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabParseContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabParseContact)
[PeerCollabQueryContactData](https://www.google.com/search?num=5&q=PeerCollabQueryContactData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabQueryContactData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabQueryContactData)
[PeerCollabRefreshEndpointData](https://www.google.com/search?num=5&q=PeerCollabRefreshEndpointData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabRefreshEndpointData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabRefreshEndpointData)
[PeerCollabRegisterApplication](https://www.google.com/search?num=5&q=PeerCollabRegisterApplication+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabRegisterApplication](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabRegisterApplication)
[PeerCollabRegisterEvent](https://www.google.com/search?num=5&q=PeerCollabRegisterEvent+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabRegisterEvent](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabRegisterEvent)
[PeerCollabSetEndpointName](https://www.google.com/search?num=5&q=PeerCollabSetEndpointName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSetEndpointName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSetEndpointName)
[PeerCollabSetObject](https://www.google.com/search?num=5&q=PeerCollabSetObject+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSetObject](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSetObject)
[PeerCollabSetPresenceInfo](https://www.google.com/search?num=5&q=PeerCollabSetPresenceInfo+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSetPresenceInfo](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSetPresenceInfo)
[PeerCollabShutdown](https://www.google.com/search?num=5&q=PeerCollabShutdown+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabShutdown](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabShutdown)
[PeerCollabSignin](https://www.google.com/search?num=5&q=PeerCollabSignin+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSignin](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSignin)
[PeerCollabSignout](https://www.google.com/search?num=5&q=PeerCollabSignout+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSignout](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSignout)
[PeerCollabStartup](https://www.google.com/search?num=5&q=PeerCollabStartup+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabStartup](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabStartup)
[PeerCollabSubscribeEndpointData](https://www.google.com/search?num=5&q=PeerCollabSubscribeEndpointData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabSubscribeEndpointData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabSubscribeEndpointData)
[PeerCollabUnregisterApplication](https://www.google.com/search?num=5&q=PeerCollabUnregisterApplication+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabUnregisterApplication](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabUnregisterApplication)
[PeerCollabUnregisterEvent](https://www.google.com/search?num=5&q=PeerCollabUnregisterEvent+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabUnregisterEvent](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabUnregisterEvent)
[PeerCollabUnsubscribeEndpointData](https://www.google.com/search?num=5&q=PeerCollabUnsubscribeEndpointData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabUnsubscribeEndpointData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabUnsubscribeEndpointData)
[PeerCollabUpdateContact](https://www.google.com/search?num=5&q=PeerCollabUpdateContact+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCollabUpdateContact](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCollabUpdateContact)
[PeerCreatePeerName](https://www.google.com/search?num=5&q=PeerCreatePeerName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerCreatePeerName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerCreatePeerName)
[PeerEndEnumeration](https://www.google.com/search?num=5&q=PeerEndEnumeration+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerEndEnumeration](https://github.com/dahall/Vanara/search?l=C%23&q=PeerEndEnumeration)
[PeerEnumGroups](https://www.google.com/search?num=5&q=PeerEnumGroups+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerEnumGroups](https://github.com/dahall/Vanara/search?l=C%23&q=PeerEnumGroups)
[PeerEnumIdentities](https://www.google.com/search?num=5&q=PeerEnumIdentities+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerEnumIdentities](https://github.com/dahall/Vanara/search?l=C%23&q=PeerEnumIdentities)
[PeerFreeData](https://www.google.com/search?num=5&q=PeerFreeData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerFreeData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerFreeData)
[PeerGetItemCount](https://www.google.com/search?num=5&q=PeerGetItemCount+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGetItemCount](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGetItemCount)
[PeerGetNextItem](https://www.google.com/search?num=5&q=PeerGetNextItem+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGetNextItem](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGetNextItem)
[PeerGraphShutdown](https://www.google.com/search?num=5&q=PeerGraphShutdown+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGraphShutdown](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGraphShutdown)
[PeerGraphStartup](https://www.google.com/search?num=5&q=PeerGraphStartup+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGraphStartup](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGraphStartup)
[PeerGroupAddRecord](https://www.google.com/search?num=5&q=PeerGroupAddRecord+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupAddRecord](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupAddRecord)
[PeerGroupClose](https://www.google.com/search?num=5&q=PeerGroupClose+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupClose](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupClose)
[PeerGroupCloseDirectConnection](https://www.google.com/search?num=5&q=PeerGroupCloseDirectConnection+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupCloseDirectConnection](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupCloseDirectConnection)
[PeerGroupConnect](https://www.google.com/search?num=5&q=PeerGroupConnect+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupConnect](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupConnect)
[PeerGroupConnectByAddress](https://www.google.com/search?num=5&q=PeerGroupConnectByAddress+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupConnectByAddress](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupConnectByAddress)
[PeerGroupCreate](https://www.google.com/search?num=5&q=PeerGroupCreate+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupCreate](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupCreate)
[PeerGroupCreateInvitation](https://www.google.com/search?num=5&q=PeerGroupCreateInvitation+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupCreateInvitation](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupCreateInvitation)
[PeerGroupCreatePasswordInvitation](https://www.google.com/search?num=5&q=PeerGroupCreatePasswordInvitation+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupCreatePasswordInvitation](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupCreatePasswordInvitation)
[PeerGroupDelete](https://www.google.com/search?num=5&q=PeerGroupDelete+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupDelete](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupDelete)
[PeerGroupDeleteRecord](https://www.google.com/search?num=5&q=PeerGroupDeleteRecord+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupDeleteRecord](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupDeleteRecord)
[PeerGroupEnumConnections](https://www.google.com/search?num=5&q=PeerGroupEnumConnections+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupEnumConnections](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupEnumConnections)
[PeerGroupEnumMembers](https://www.google.com/search?num=5&q=PeerGroupEnumMembers+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupEnumMembers](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupEnumMembers)
[PeerGroupEnumRecords](https://www.google.com/search?num=5&q=PeerGroupEnumRecords+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupEnumRecords](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupEnumRecords)
[PeerGroupExportConfig](https://www.google.com/search?num=5&q=PeerGroupExportConfig+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupExportConfig](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupExportConfig)
[PeerGroupExportDatabase](https://www.google.com/search?num=5&q=PeerGroupExportDatabase+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupExportDatabase](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupExportDatabase)
[PeerGroupGetEventData](https://www.google.com/search?num=5&q=PeerGroupGetEventData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupGetEventData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupGetEventData)
[PeerGroupGetProperties](https://www.google.com/search?num=5&q=PeerGroupGetProperties+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupGetProperties](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupGetProperties)
[PeerGroupGetRecord](https://www.google.com/search?num=5&q=PeerGroupGetRecord+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupGetRecord](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupGetRecord)
[PeerGroupGetStatus](https://www.google.com/search?num=5&q=PeerGroupGetStatus+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupGetStatus](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupGetStatus)
[PeerGroupHandlePowerEvent](https://www.google.com/search?num=5&q=PeerGroupHandlePowerEvent+site%3Adocs.microsoft.com) | |
[PeerGroupImportConfig](https://www.google.com/search?num=5&q=PeerGroupImportConfig+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupImportConfig](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupImportConfig)
[PeerGroupImportDatabase](https://www.google.com/search?num=5&q=PeerGroupImportDatabase+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupImportDatabase](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupImportDatabase)
[PeerGroupIssueCredentials](https://www.google.com/search?num=5&q=PeerGroupIssueCredentials+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupIssueCredentials](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupIssueCredentials)
[PeerGroupJoin](https://www.google.com/search?num=5&q=PeerGroupJoin+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupJoin](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupJoin)
[PeerGroupOpen](https://www.google.com/search?num=5&q=PeerGroupOpen+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupOpen](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupOpen)
[PeerGroupOpenDirectConnection](https://www.google.com/search?num=5&q=PeerGroupOpenDirectConnection+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupOpenDirectConnection](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupOpenDirectConnection)
[PeerGroupParseInvitation](https://www.google.com/search?num=5&q=PeerGroupParseInvitation+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupParseInvitation](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupParseInvitation)
[PeerGroupPasswordJoin](https://www.google.com/search?num=5&q=PeerGroupPasswordJoin+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupPasswordJoin](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupPasswordJoin)
[PeerGroupPeerTimeToUniversalTime](https://www.google.com/search?num=5&q=PeerGroupPeerTimeToUniversalTime+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupPeerTimeToUniversalTime](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupPeerTimeToUniversalTime)
[PeerGroupRegisterEvent](https://www.google.com/search?num=5&q=PeerGroupRegisterEvent+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupRegisterEvent](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupRegisterEvent)
[PeerGroupResumePasswordAuthentication](https://www.google.com/search?num=5&q=PeerGroupResumePasswordAuthentication+site%3Adocs.microsoft.com) | |
[PeerGroupSearchRecords](https://www.google.com/search?num=5&q=PeerGroupSearchRecords+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupSearchRecords](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupSearchRecords)
[PeerGroupSendData](https://www.google.com/search?num=5&q=PeerGroupSendData+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupSendData](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupSendData)
[PeerGroupSetProperties](https://www.google.com/search?num=5&q=PeerGroupSetProperties+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupSetProperties](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupSetProperties)
[PeerGroupShutdown](https://www.google.com/search?num=5&q=PeerGroupShutdown+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupShutdown](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupShutdown)
[PeerGroupStartup](https://www.google.com/search?num=5&q=PeerGroupStartup+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupStartup](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupStartup)
[PeerGroupUniversalTimeToPeerTime](https://www.google.com/search?num=5&q=PeerGroupUniversalTimeToPeerTime+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupUniversalTimeToPeerTime](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupUniversalTimeToPeerTime)
[PeerGroupUnregisterEvent](https://www.google.com/search?num=5&q=PeerGroupUnregisterEvent+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupUnregisterEvent](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupUnregisterEvent)
[PeerGroupUpdateRecord](https://www.google.com/search?num=5&q=PeerGroupUpdateRecord+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerGroupUpdateRecord](https://github.com/dahall/Vanara/search?l=C%23&q=PeerGroupUpdateRecord)
[PeerHostNameToPeerName](https://www.google.com/search?num=5&q=PeerHostNameToPeerName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerHostNameToPeerName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerHostNameToPeerName)
[PeerIdentityCreate](https://www.google.com/search?num=5&q=PeerIdentityCreate+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityCreate](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityCreate)
[PeerIdentityDelete](https://www.google.com/search?num=5&q=PeerIdentityDelete+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityDelete](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityDelete)
[PeerIdentityExport](https://www.google.com/search?num=5&q=PeerIdentityExport+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityExport](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityExport)
[PeerIdentityGetCert](https://www.google.com/search?num=5&q=PeerIdentityGetCert+site%3Adocs.microsoft.com) | |
[PeerIdentityGetCryptKey](https://www.google.com/search?num=5&q=PeerIdentityGetCryptKey+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityGetCryptKey](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityGetCryptKey)
[PeerIdentityGetDefault](https://www.google.com/search?num=5&q=PeerIdentityGetDefault+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityGetDefault](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityGetDefault)
[PeerIdentityGetFriendlyName](https://www.google.com/search?num=5&q=PeerIdentityGetFriendlyName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityGetFriendlyName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityGetFriendlyName)
[PeerIdentityGetXML](https://www.google.com/search?num=5&q=PeerIdentityGetXML+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityGetXML](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityGetXML)
[PeerIdentityImport](https://www.google.com/search?num=5&q=PeerIdentityImport+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentityImport](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentityImport)
[PeerIdentitySetFriendlyName](https://www.google.com/search?num=5&q=PeerIdentitySetFriendlyName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerIdentitySetFriendlyName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerIdentitySetFriendlyName)
[PeerNameToPeerHostName](https://www.google.com/search?num=5&q=PeerNameToPeerHostName+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerNameToPeerHostName](https://github.com/dahall/Vanara/search?l=C%23&q=PeerNameToPeerHostName)
[PeerPnrpEndResolve](https://www.google.com/search?num=5&q=PeerPnrpEndResolve+site%3Adocs.microsoft.com) | |
[PeerPnrpGetCloudInfo](https://www.google.com/search?num=5&q=PeerPnrpGetCloudInfo+site%3Adocs.microsoft.com) | |
[PeerPnrpGetEndpoint](https://www.google.com/search?num=5&q=PeerPnrpGetEndpoint+site%3Adocs.microsoft.com) | |
[PeerPnrpRegister](https://www.google.com/search?num=5&q=PeerPnrpRegister+site%3Adocs.microsoft.com) | |
[PeerPnrpResolve](https://www.google.com/search?num=5&q=PeerPnrpResolve+site%3Adocs.microsoft.com) | |
[PeerPnrpShutdown](https://www.google.com/search?num=5&q=PeerPnrpShutdown+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerPnrpShutdown](https://github.com/dahall/Vanara/search?l=C%23&q=PeerPnrpShutdown)
[PeerPnrpStartResolve](https://www.google.com/search?num=5&q=PeerPnrpStartResolve+site%3Adocs.microsoft.com) | |
[PeerPnrpStartup](https://www.google.com/search?num=5&q=PeerPnrpStartup+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PeerPnrpStartup](https://github.com/dahall/Vanara/search?l=C%23&q=PeerPnrpStartup)
[PeerPnrpUnregister](https://www.google.com/search?num=5&q=PeerPnrpUnregister+site%3Adocs.microsoft.com) | |
[PeerPnrpUpdateRegistration](https://www.google.com/search?num=5&q=PeerPnrpUpdateRegistration+site%3Adocs.microsoft.com) | |
[PeerSSPAddCredentials](https://www.google.com/search?num=5&q=PeerSSPAddCredentials+site%3Adocs.microsoft.com) | |
[PeerSSPRemoveCredentials](https://www.google.com/search?num=5&q=PeerSSPRemoveCredentials+site%3Adocs.microsoft.com) | |
### Structures
Native Structure | Header | Managed Structure
--- | --- | ---
[HGRAPH](https://www.google.com/search?num=5&q=HGRAPH+site%3Adocs.microsoft.com) | | [Vanara.PInvoke.P2P.HGRAPH](https://github.com/dahall/Vanara/search?l=C%23&q=HGRAPH)
[HGROUP](https://www.google.com/search?num=5&q=HGROUP+site%3Adocs.microsoft.com) | | [Vanara.PInvoke.P2P.HGROUP](https://github.com/dahall/Vanara/search?l=C%23&q=HGROUP)
[HPEERENUM](https://www.google.com/search?num=5&q=HPEERENUM+site%3Adocs.microsoft.com) | | [Vanara.PInvoke.P2P.HPEERENUM](https://github.com/dahall/Vanara/search?l=C%23&q=HPEERENUM)
[HPEEREVENT](https://www.google.com/search?num=5&q=HPEEREVENT+site%3Adocs.microsoft.com) | | [Vanara.PInvoke.P2P.HPEEREVENT](https://github.com/dahall/Vanara/search?l=C%23&q=HPEEREVENT)
[PEER_ADDRESS](https://www.google.com/search?num=5&q=PEER_ADDRESS+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_ADDRESS](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_ADDRESS)
[PEER_APP_LAUNCH_INFO](https://www.google.com/search?num=5&q=PEER_APP_LAUNCH_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_APP_LAUNCH_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_APP_LAUNCH_INFO)
[PEER_APPLICATION](https://www.google.com/search?num=5&q=PEER_APPLICATION+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_APPLICATION](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_APPLICATION)
[PEER_APPLICATION_REGISTRATION_INFO](https://www.google.com/search?num=5&q=PEER_APPLICATION_REGISTRATION_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_APPLICATION_REGISTRATION_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_APPLICATION_REGISTRATION_INFO)
[PEER_COLLAB_EVENT_DATA](https://www.google.com/search?num=5&q=PEER_COLLAB_EVENT_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_COLLAB_EVENT_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_COLLAB_EVENT_DATA)
[PEER_COLLAB_EVENT_REGISTRATION](https://www.google.com/search?num=5&q=PEER_COLLAB_EVENT_REGISTRATION+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_COLLAB_EVENT_REGISTRATION](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_COLLAB_EVENT_REGISTRATION)
[PEER_CONNECTION_INFO](https://www.google.com/search?num=5&q=PEER_CONNECTION_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_CONNECTION_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_CONNECTION_INFO)
[PEER_CONTACT](https://www.google.com/search?num=5&q=PEER_CONTACT+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_CONTACT](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_CONTACT)
[PEER_CREDENTIAL_INFO](https://www.google.com/search?num=5&q=PEER_CREDENTIAL_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_CREDENTIAL_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_CREDENTIAL_INFO)
[PEER_DATA](https://www.google.com/search?num=5&q=PEER_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_DATA)
[PEER_ENDPOINT](https://www.google.com/search?num=5&q=PEER_ENDPOINT+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_ENDPOINT](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_ENDPOINT)
[PEER_EVENT_APPLICATION_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_APPLICATION_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_APPLICATION_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_APPLICATION_CHANGED_DATA)
[PEER_EVENT_CONNECTION_CHANGE_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_CONNECTION_CHANGE_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_CONNECTION_CHANGE_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_CONNECTION_CHANGE_DATA)
[PEER_EVENT_ENDPOINT_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_ENDPOINT_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_ENDPOINT_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_ENDPOINT_CHANGED_DATA)
[PEER_EVENT_INCOMING_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_INCOMING_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_INCOMING_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_INCOMING_DATA)
[PEER_EVENT_MEMBER_CHANGE_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_MEMBER_CHANGE_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_MEMBER_CHANGE_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_MEMBER_CHANGE_DATA)
[PEER_EVENT_NODE_CHANGE_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_NODE_CHANGE_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_NODE_CHANGE_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_NODE_CHANGE_DATA)
[PEER_EVENT_OBJECT_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_OBJECT_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_OBJECT_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_OBJECT_CHANGED_DATA)
[PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA)
[PEER_EVENT_PRESENCE_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_PRESENCE_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_PRESENCE_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_PRESENCE_CHANGED_DATA)
[PEER_EVENT_RECORD_CHANGE_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_RECORD_CHANGE_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_RECORD_CHANGE_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_RECORD_CHANGE_DATA)
[PEER_EVENT_REQUEST_STATUS_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_REQUEST_STATUS_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_REQUEST_STATUS_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_REQUEST_STATUS_CHANGED_DATA)
[PEER_EVENT_SYNCHRONIZED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_SYNCHRONIZED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_SYNCHRONIZED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_SYNCHRONIZED_DATA)
[PEER_EVENT_WATCHLIST_CHANGED_DATA](https://www.google.com/search?num=5&q=PEER_EVENT_WATCHLIST_CHANGED_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_EVENT_WATCHLIST_CHANGED_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_EVENT_WATCHLIST_CHANGED_DATA)
[PEER_GRAPH_EVENT_DATA](https://www.google.com/search?num=5&q=PEER_GRAPH_EVENT_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GRAPH_EVENT_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GRAPH_EVENT_DATA)
[PEER_GRAPH_EVENT_REGISTRATION](https://www.google.com/search?num=5&q=PEER_GRAPH_EVENT_REGISTRATION+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GRAPH_EVENT_REGISTRATION](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GRAPH_EVENT_REGISTRATION)
[PEER_GRAPH_PROPERTIES](https://www.google.com/search?num=5&q=PEER_GRAPH_PROPERTIES+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GRAPH_PROPERTIES](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GRAPH_PROPERTIES)
[PEER_GROUP_EVENT_DATA](https://www.google.com/search?num=5&q=PEER_GROUP_EVENT_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GROUP_EVENT_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GROUP_EVENT_DATA)
[PEER_GROUP_EVENT_REGISTRATION](https://www.google.com/search?num=5&q=PEER_GROUP_EVENT_REGISTRATION+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GROUP_EVENT_REGISTRATION](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GROUP_EVENT_REGISTRATION)
[PEER_GROUP_PROPERTIES](https://www.google.com/search?num=5&q=PEER_GROUP_PROPERTIES+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_GROUP_PROPERTIES](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_GROUP_PROPERTIES)
[PEER_INVITATION](https://www.google.com/search?num=5&q=PEER_INVITATION+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_INVITATION](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_INVITATION)
[PEER_INVITATION_INFO](https://www.google.com/search?num=5&q=PEER_INVITATION_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_INVITATION_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_INVITATION_INFO)
[PEER_INVITATION_RESPONSE](https://www.google.com/search?num=5&q=PEER_INVITATION_RESPONSE+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_INVITATION_RESPONSE](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_INVITATION_RESPONSE)
[PEER_MEMBER](https://www.google.com/search?num=5&q=PEER_MEMBER+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_MEMBER](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_MEMBER)
[PEER_NAME_PAIR](https://www.google.com/search?num=5&q=PEER_NAME_PAIR+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_NAME_PAIR](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_NAME_PAIR)
[PEER_NODE_INFO](https://www.google.com/search?num=5&q=PEER_NODE_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_NODE_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_NODE_INFO)
[PEER_OBJECT](https://www.google.com/search?num=5&q=PEER_OBJECT+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_OBJECT](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_OBJECT)
[PEER_PEOPLE_NEAR_ME](https://www.google.com/search?num=5&q=PEER_PEOPLE_NEAR_ME+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_PEOPLE_NEAR_ME](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_PEOPLE_NEAR_ME)
[PEER_PNRP_CLOUD_INFO](https://www.google.com/search?num=5&q=PEER_PNRP_CLOUD_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_PNRP_CLOUD_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_PNRP_CLOUD_INFO)
[PEER_PNRP_ENDPOINT_INFO](https://www.google.com/search?num=5&q=PEER_PNRP_ENDPOINT_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_PNRP_ENDPOINT_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_PNRP_ENDPOINT_INFO)
[PEER_PNRP_REGISTRATION_INFO](https://www.google.com/search?num=5&q=PEER_PNRP_REGISTRATION_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_PNRP_REGISTRATION_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_PNRP_REGISTRATION_INFO)
[PEER_PRESENCE_INFO](https://www.google.com/search?num=5&q=PEER_PRESENCE_INFO+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_PRESENCE_INFO](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_PRESENCE_INFO)
[PEER_RECORD](https://www.google.com/search?num=5&q=PEER_RECORD+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_RECORD](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_RECORD)
[PEER_SECURITY_INTERFACE](https://www.google.com/search?num=5&q=PEER_SECURITY_INTERFACE+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_SECURITY_INTERFACE](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_SECURITY_INTERFACE)
[PEER_VERSION_DATA](https://www.google.com/search?num=5&q=PEER_VERSION_DATA+site%3Adocs.microsoft.com) | p2p.h | [Vanara.PInvoke.P2P.PEER_VERSION_DATA](https://github.com/dahall/Vanara/search?l=C%23&q=PEER_VERSION_DATA)

2587
PInvoke/P2P/P2P.Collab.cs Normal file

File diff suppressed because it is too large Load Diff

666
PInvoke/P2P/P2P.Funcs.cs Normal file
View File

@ -0,0 +1,666 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Vanara.Extensions;
using Vanara.InteropServices;
using static Vanara.PInvoke.AdvApi32;
using static Vanara.PInvoke.Crypt32;
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
namespace Vanara.PInvoke
{
/// <summary>Items from the P2P.dll</summary>
public static partial class P2P
{
/// <summary/>
public const ushort PEER_COLLAB_VERSION = 0x0001;
/// <summary/>
public const ushort PEER_GRAPH_VERSION = 0x0001;
/// <summary/>
public const ushort PEER_GROUP_VERSION = 0x0101;
/// <summary/>
public const ushort PNRP_VERSION = 0x0002;
/// <summary>
/// The <c>PFNPEER_FREE_SECURITY_DATA</c> callback specifies the function that the Peer Graphing Infrastructure calls to free data
/// returned by PFNPEER_SECURE_RECORD and PFNPEER_VALIDATE_RECORD callbacks.
/// </summary>
/// <param name="hGraph">Specifies the peer graph associated with the specified record.</param>
/// <param name="pvContext">
/// Pointer to the security context to free. This parameter is set to the value of the <c>pvContext</c> member of the
/// PEER_SECURITY_INTERFACE structure passed in PeerGraphCreate or PeerGraphOpen.
/// </param>
/// <param name="pSecurityData">Pointer to the security data to free.</param>
/// <returns>
/// <para>If the callback is successful, the return value is S_OK. Otherwise, the callback returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>This callback can be invoked from any of the Peer Graphing API functions involving records, such as PeerGraphUpdateRecord.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nc-p2p-pfnpeer_free_security_data PFNPEER_FREE_SECURITY_DATA
// PfnpeerFreeSecurityData; HRESULT PfnpeerFreeSecurityData( HGRAPH hGraph, PVOID pvContext, PPEER_DATA pSecurityData ) {...}
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
[PInvokeData("p2p.h", MSDNShortId = "NC:p2p.PFNPEER_FREE_SECURITY_DATA")]
public delegate HRESULT PFNPEER_FREE_SECURITY_DATA(HGRAPH hGraph, [In, Optional] IntPtr pvContext, in PEER_DATA pSecurityData);
/// <summary></summary>
/// <param name="hGraph">Specifies the peer graph associated with the specified record.</param>
/// <param name="pvContext">
/// Pointer to the security context. This parameter should point to the <c>pvContext</c> member of the PEER_SECURITY_INTERFACE structure.
/// </param>
/// <returns>If this callback succeeds, the return value is S_OK; otherwise, the error.</returns>
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
[PInvokeData("p2p.h")]
public delegate HRESULT PFNPEER_ON_PASSWORD_AUTH_FAILED(HGRAPH hGraph, [In, Optional] IntPtr pvContext);
/// <summary>
/// The <c>PFNPEER_SECURE_RECORD</c> callback specifies the function that the Peer Graphing Infrastructure calls to secure records.
/// </summary>
/// <param name="hGraph">Specifies the peer graph associated with the specified record.</param>
/// <param name="pvContext">
/// Pointer to the security context. This parameter points to the <c>pvContext</c> member of the PEER_SECURITY_INTERFACE structure.
/// </param>
/// <param name="pRecord">Pointer to the record to secure.</param>
/// <param name="changeType">Specifies the reason the validation must occur. PEER_RECORD_CHANGE_TYPE enumerates the valid values.</param>
/// <param name="ppSecurityData"/>
/// <returns>If this callback succeeds, the return value is S_OK.</returns>
/// <remarks>
/// <para>
/// This callback is invoked whenever an application calls any of the methods that modify records, such as PeerGraphAddRecord or
/// PeerGraphUpdateRecord. This callback should create data that is specific to this record, such as a small digital signature, and
/// return it through the ppSecurityData parameter. This data is then added to the record in the <c>securityData</c> member, and is
/// verified by the method specified by the <c>pfnValidateRecord</c> member of the PEER_SECURITY_INTERFACE.
/// </para>
/// <para>
/// <c>Note</c> This process happens on the local computer as well as any peer connected to the graph when the peer receives the record.
/// </para>
/// <para>
/// If the operation specified by the changeType parameter is not allowed, the callback should return a failure code, such as
/// PEER_E_NOT_AUTHORIZED, instead of S_OK.
/// </para>
/// <para>This callback can be invoked from any of the Peer Graphing API functions involving records, such as PeerGraphUpdateRecord.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nc-p2p-pfnpeer_secure_record PFNPEER_SECURE_RECORD PfnpeerSecureRecord;
// HRESULT PfnpeerSecureRecord( HGRAPH hGraph, PVOID pvContext, PPEER_RECORD pRecord, PEER_RECORD_CHANGE_TYPE changeType, PPEER_DATA
// *ppSecurityData ) {...}
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
[PInvokeData("p2p.h", MSDNShortId = "NC:p2p.PFNPEER_SECURE_RECORD")]
public delegate HRESULT PFNPEER_SECURE_RECORD(HGRAPH hGraph, [In, Optional] IntPtr pvContext, in PEER_RECORD pRecord, PEER_RECORD_CHANGE_TYPE changeType, out PEER_DATA ppSecurityData);
/// <summary>
/// The <c>PFNPEER_VALIDATE_RECORD</c> callback specifies the function that the Peer Graphing Infrastructure calls to validate records.
/// </summary>
/// <param name="hGraph">Specifies the peer graph associated with the specified record.</param>
/// <param name="pvContext">
/// Pointer to the security context. This parameter should point to the <c>pvContext</c> member of the PEER_SECURITY_INTERFACE structure.
/// </param>
/// <param name="pRecord">Specifies the record to validate.</param>
/// <param name="changeType">Specifies the reason the validation must occur. Must be one of the PEER_RECORD_CHANGE_TYPE values.</param>
/// <returns>
/// <para>If this callback succeeds, the return value is S_OK; otherwise, the function returns one of the following errors:</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>PEER_E_DEFERRED_VALIDATION</term>
/// <term>
/// The specified record cannot be validated at this time because there is insufficient information to complete the operation.
/// Validation is deferred. Call PeerGraphValidateDeferredRecords when sufficient information is obtained.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_INVALID_RECORD</term>
/// <term>The specified record is invalid.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// When this callback is called by the Peer Graphing Infrastructure, a PEER_RECORD_CHANGE_TYPE value is passed. This specifies the
/// operation just performed on the record. The application must verify the record based on the change type. If the application
/// requires more information to verify the record, it can return PEER_E_DEFERRED_VALIDATION and the Peer Graphing Infrastructure
/// places the record in a deferred-record list. Once the security mechanism has enough information to validate the record, it calls
/// PeerGraphValidateDeferredRecords, and any record in the deferred-record list is re-submitted for validation.
/// </para>
/// <para>This callback can be invoked from any of the Peer Graphing API functions involving records, such as PeerGraphUpdateRecord.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nc-p2p-pfnpeer_validate_record PFNPEER_VALIDATE_RECORD
// PfnpeerValidateRecord; HRESULT PfnpeerValidateRecord( HGRAPH hGraph, PVOID pvContext, PPEER_RECORD pRecord,
// PEER_RECORD_CHANGE_TYPE changeType ) {...}
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
[PInvokeData("p2p.h", MSDNShortId = "NC:p2p.PFNPEER_VALIDATE_RECORD")]
public delegate HRESULT PFNPEER_VALIDATE_RECORD(HGRAPH hGraph, [In, Optional] IntPtr pvContext, in PEER_RECORD pRecord, PEER_RECORD_CHANGE_TYPE changeType);
/// <summary>
/// The <c>PeerEndEnumeration</c> function releases an enumeration, for example, a record or member enumeration, and deallocates all
/// resources associated with the enumeration.
/// </summary>
/// <param name="hPeerEnum">Handle to the enumeration to be released. This handle is generated by a peer enumeration function.</param>
/// <returns>
/// <para>Returns <c>S_OK</c> if the operation succeeds. Otherwise, the function returns the following value.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>The parameter is not valid.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerendenumeration NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerEndEnumeration( HPEERENUM hPeerEnum );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerEndEnumeration")]
public static extern HRESULT PeerEndEnumeration(HPEERENUM hPeerEnum);
/// <summary>
/// The <c>PeerFreeData</c> function deallocates a block of data and returns it to the memory pool. Use the <c>PeerFreeData</c>
/// function to free data that the Peer Identity Manager, Peer Grouping, and Peer Collaboration APIs return.
/// </summary>
/// <param name="pvData">Pointer to a block of data to be deallocated. This parameter must reference a valid block of memory.</param>
/// <returns>There are no return values.</returns>
/// <remarks>
/// Do not use this function to release memory that the Peer Graphing API returns. Use PeerGraphFreeData for memory that the Peer
/// Graphing API returns.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerfreedata NOT_BUILD_WINDOWS_DEPRECATE VOID PeerFreeData( LPCVOID
// pvData );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerFreeData")]
public static extern void PeerFreeData(IntPtr pvData);
/// <summary>The <c>PeerGetItemCount</c> function returns a count of the items in a peer enumeration.</summary>
/// <param name="hPeerEnum">
/// Handle to the peer enumeration on which a count is performed. A peer enumeration function generates this handle.
/// </param>
/// <param name="pCount">Returns the total number of items in a peer enumeration.</param>
/// <returns>
/// <para>Returns <c>S_OK</c> if the operation succeeds. Otherwise, the function returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peergetitemcount NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerGetItemCount( HPEERENUM hPeerEnum, ULONG *pCount );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerGetItemCount")]
public static extern HRESULT PeerGetItemCount(HPEERENUM hPeerEnum, out uint pCount);
/// <summary>The <c>PeerGetNextItem</c> function returns a specific number of items from a peer enumeration.</summary>
/// <param name="hPeerEnum">
/// Handle to the peer enumeration from which items are retrieved. This handle is generated by a peer enumeration function.
/// </param>
/// <param name="pCount">
/// Pointer to an integer that specifies the number of items to be retrieved from the peer enumeration. When returned, it contains
/// the number of items in ppvItems. This parameter cannot be <c>NULL</c>.
/// </param>
/// <param name="pppvItems">
/// Receives a pointer to an array of pointers to the next pCount items in the peer enumeration. The data, for example, a record or
/// member information block, depends on the actual peer enumeration type.
/// </param>
/// <returns>
/// <para>Returns <c>S_OK</c> if the operation succeeds. Otherwise, the function returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform a specified operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>The <c>PeerGetNextItem</c> function returns the following:</para>
/// <list type="bullet">
/// <item>
/// <term>Items that are equal to or less than the amount specified in pCount.</term>
/// </item>
/// <item>
/// <term>A list of items that are less than the amount specified when the amount is greater than the number of items available.</term>
/// </item>
/// </list>
/// <para>
/// <c>Note</c> For example, when the inbound value of pCount is 10 and the remainder of the enumeration is 5 items, only 5 items
/// are returned and the value pointed to by pCount is set to 5.
/// </para>
/// <para>All items returned must be freed by passing a pointer to the array of pointers to the PeerFreeData function.</para>
/// <para>The end of an enumeration is indicated when the function returns with the pCount parameter set to zero (0).</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peergetnextitem NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerGetNextItem( HPEERENUM hPeerEnum, ULONG *pCount, PVOID **pppvItems );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerGetNextItem")]
public static extern HRESULT PeerGetNextItem([In] HPEERENUM hPeerEnum, ref uint pCount, out SafePeerData pppvItems);
/// <summary>
/// The <c>PeerGraphShutdown</c> function cleans up any resources allocated by the call to PeerGraphStartup. There must be a call to
/// <c>PeerGraphShutdown</c> for each call to <c>PeerGraphStartup</c>.
/// </summary>
/// <returns>
/// <para>
/// Returns S_OK if the operation succeeds; otherwise, the function returns the one of the standard error codes defined in
/// WinError.h, or the function returns the following value:
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>PEER_E_NOT_INITIALIZED</term>
/// <term>The peer graph must be initialized with a call to PeerGraphStartup before using this function.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// When the last <c>PeerGraphShutdown</c> is called for a peer graph, all the opened peer graphs, outstanding enumeration handles,
/// and outstanding event registration handles are automatically released.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peergraphshutdown NOT_BUILD_WINDOWS_DEPRECATE HRESULT PeerGraphShutdown();
[DllImport(Lib_P2PGraph, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerGraphShutdown")]
public static extern HRESULT PeerGraphShutdown();
/// <summary>
/// The <c>PeerGraphStartup</c> function indicates to the Peer Graphing Infrastructure what version of the Peer protocols the
/// calling application requires. <c>PeerGraphStartup</c> must be called before any other peer graphing functions. It must be
/// matched by a call to PeerGraphShutdown.
/// </summary>
/// <param name="wVersionRequested">Specify PEER_GRAPH_VERSION.</param>
/// <param name="pVersionData">
/// Pointer to a PEER_VERSION_DATA structure that receives the version of the Peer Infrastructure installed on the local computer.
/// </param>
/// <returns>
/// <para>Returns S_OK if the operation succeeds; otherwise, the function returns one of the following values:</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_UNSUPPORTED_VERSION</term>
/// <term>The version requested is not supported by the Peer Infrastructure .dll installed on the local computer.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peergraphstartup NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerGraphStartup( WORD wVersionRequested, PPEER_VERSION_DATA pVersionData );
[DllImport(Lib_P2PGraph, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerGraphStartup")]
public static extern HRESULT PeerGraphStartup(ushort wVersionRequested, out PEER_VERSION_DATA pVersionData);
/// <summary>
/// The <c>PeerHostNameToPeerName</c> function decodes a host name returned by PeerNameToPeerHostName into the peer name string it represents.
/// </summary>
/// <param name="pwzHostName">Pointer to a zero-terminated Unicode string that contains the host name to decode.</param>
/// <param name="ppwzPeerName">
/// Pointer to the address of the zero-terminated Unicode string that contains the decoded peer name. The returned string must be
/// released with PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerhostnametopeername NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerHostNameToPeerName( PCWSTR pwzHostName, PWSTR *ppwzPeerName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerHostNameToPeerName")]
public static extern HRESULT PeerHostNameToPeerName([MarshalAs(UnmanagedType.LPWStr)] string pwzHostName,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzPeerName);
/// <summary>
/// The <c>PeerNameToPeerHostName</c> function encodes the supplied peer name as a format that can be used with a subsequent call to
/// the getaddrinfo Windows Sockets function.
/// </summary>
/// <param name="pwzPeerName">Pointer to a zero-terminated Unicode string that contains the peer name to encode as a host name.</param>
/// <param name="ppwzHostName">
/// Pointer to the address of the zero-terminated Unicode string that contains the encoded host name. This string can be passed to
/// getaddrinfo_v2 to obtain network information about the peer.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peernametopeerhostname NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerNameToPeerHostName( PCWSTR pwzPeerName, PWSTR *ppwzHostName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerNameToPeerHostName")]
public static extern HRESULT PeerNameToPeerHostName([MarshalAs(UnmanagedType.LPWStr)] string pwzPeerName,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzHostName);
/// <summary>
/// The <c>PeerPnrpShutdown</c> function shuts down a running instance of the Peer Name Resolution Protocol (PNRP) service and
/// releases all resources associated with it.
/// </summary>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>PEER_E_NOT_INITIALIZED</term>
/// <term>The Windows Peer infrastructure is not initialized. Calling the relevant initialization function is required.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerpnrpshutdown NOT_BUILD_WINDOWS_DEPRECATE HRESULT PeerPnrpShutdown();
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerPnrpShutdown")]
public static extern HRESULT PeerPnrpShutdown();
/// <summary>The <c>PeerPnrpStartup</c> function starts the Peer Name Resolution Protocol (PNRP) service for the calling peer.</summary>
/// <param name="wVersionRequested">The version of PNRP to use for this service instance. The default value is PNRP_VERSION (2).</param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_UNSUPPORTED_VERSION</term>
/// <term>The provided version is unsupported.</term>
/// </item>
/// <item>
/// <term>PEER_E_SERVICE_NOT_AVAILABLE</term>
/// <term>
/// The Peer Collaboration infrastructure, which includes People Near Me, is not available. This code will also be returned whenever
/// an attempt is made to utilize the Collaboration infrastructure from an elevated process.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>To shutdown the PNRP service for the calling peer and release all resources associated with it, call PeerPnrpShutdown.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerpnrpstartup NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerPnrpStartup( WORD wVersionRequested );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerPnrpStartup")]
public static extern HRESULT PeerPnrpStartup(ushort wVersionRequested = PNRP_VERSION);
private static IEnumerable<T> PeerEnum<T, TIn>(TIn p1, Func<TIn, SafeHPEERENUM> setup) where T : struct where TIn : struct =>
PeerEnum<T>(() => setup(p1));
private static IEnumerable<T> PeerEnum<T>(Func<SafeHPEERENUM> setup) where T : struct
{
using var hEnum = setup();
if (hEnum.IsInvalid) return new T[0];
PeerGetItemCount(hEnum, out var count).ThrowIfFailed();
if (count == 0) return new T[0];
PeerGetNextItem(hEnum, ref count, out var items).ThrowIfFailed();
using (items)
return items.DangerousGetHandle().ToArray<T>((int)count);
}
/// <summary>Provides a handle to a peer enumeration.</summary>
[StructLayout(LayoutKind.Sequential)]
public struct HPEERENUM : IHandle
{
private IntPtr handle;
/// <summary>Initializes a new instance of the <see cref="HPEERENUM"/> struct.</summary>
/// <param name="preexistingHandle">An <see cref="IntPtr"/> object that represents the pre-existing handle to use.</param>
public HPEERENUM(IntPtr preexistingHandle) => handle = preexistingHandle;
/// <summary>Returns an invalid handle by instantiating a <see cref="HPEERENUM"/> object with <see cref="IntPtr.Zero"/>.</summary>
public static HPEERENUM NULL => new HPEERENUM(IntPtr.Zero);
/// <summary>Gets a value indicating whether this instance is a null handle.</summary>
public bool IsNull => handle == IntPtr.Zero;
/// <summary>Performs an explicit conversion from <see cref="HPEERENUM"/> to <see cref="IntPtr"/>.</summary>
/// <param name="h">The handle.</param>
/// <returns>The result of the conversion.</returns>
public static explicit operator IntPtr(HPEERENUM h) => h.handle;
/// <summary>Performs an implicit conversion from <see cref="IntPtr"/> to <see cref="HPEERENUM"/>.</summary>
/// <param name="h">The pointer to a handle.</param>
/// <returns>The result of the conversion.</returns>
public static implicit operator HPEERENUM(IntPtr h) => new HPEERENUM(h);
/// <summary>Implements the operator !=.</summary>
/// <param name="h1">The first handle.</param>
/// <param name="h2">The second handle.</param>
/// <returns>The result of the operator.</returns>
public static bool operator !=(HPEERENUM h1, HPEERENUM h2) => !(h1 == h2);
/// <summary>Implements the operator ==.</summary>
/// <param name="h1">The first handle.</param>
/// <param name="h2">The second handle.</param>
/// <returns>The result of the operator.</returns>
public static bool operator ==(HPEERENUM h1, HPEERENUM h2) => h1.Equals(h2);
/// <inheritdoc/>
public override bool Equals(object obj) => obj is HPEERENUM h && handle == h.handle;
/// <inheritdoc/>
public override int GetHashCode() => handle.GetHashCode();
/// <inheritdoc/>
public IntPtr DangerousGetHandle() => handle;
}
/// <summary>Provides a <see cref="SafeHandle"/> for <see cref="HPEERENUM"/> that is disposed using <see cref="PeerEndEnumeration"/>.</summary>
public class SafeHPEERENUM : SafeHANDLE
{
/// <summary>Initializes a new instance of the <see cref="SafeHPEERENUM"/> class and assigns an existing handle.</summary>
/// <param name="preexistingHandle">An <see cref="IntPtr"/> object that represents the pre-existing handle to use.</param>
/// <param name="ownsHandle">
/// <see langword="true"/> to reliably release the handle during the finalization phase; otherwise, <see langword="false"/> (not recommended).
/// </param>
public SafeHPEERENUM(IntPtr preexistingHandle, bool ownsHandle = true) : base(preexistingHandle, ownsHandle) { }
/// <summary>Initializes a new instance of the <see cref="SafeHPEERENUM"/> class.</summary>
private SafeHPEERENUM() : base() { }
/// <summary>Performs an implicit conversion from <see cref="SafeHPEERENUM"/> to <see cref="HPEERENUM"/>.</summary>
/// <param name="h">The safe handle instance.</param>
/// <returns>The result of the conversion.</returns>
public static implicit operator HPEERENUM(SafeHPEERENUM h) => h.handle;
/// <inheritdoc/>
protected override bool InternalReleaseHandle() => PeerEndEnumeration(handle).Succeeded;
}
/// <summary>Provides a <see cref="SafeHandle"/> for data that is disposed using <see cref="PeerFreeData"/>.</summary>
public class SafePeerData : SafeHANDLE
{
/// <summary>Initializes a new instance of the <see cref="SafePeerData"/> class.</summary>
protected SafePeerData() : base() { }
/// <inheritdoc/>
protected override bool InternalReleaseHandle() { PeerFreeData(handle); return true; }
}
internal class PeerStringMarshaler : ICustomMarshaler
{
internal PeerStringMarshaler()
{
}
public static ICustomMarshaler GetInstance(string _) => new PeerStringMarshaler();
/// <summary>Performs necessary cleanup of the managed data when it is no longer needed.</summary>
/// <param name="ManagedObj">The managed object to be destroyed.</param>
public void CleanUpManagedData(object ManagedObj) { }
/// <summary>Performs necessary cleanup of the unmanaged data when it is no longer needed.</summary>
/// <param name="pNativeData">A pointer to the unmanaged data to be destroyed.</param>
public void CleanUpNativeData(IntPtr pNativeData) => PeerFreeData(pNativeData);
/// <summary>Returns the size of the native data to be marshaled.</summary>
/// <returns>The size in bytes of the native data.</returns>
public int GetNativeDataSize() => -1;
/// <summary>Converts the managed data to unmanaged data.</summary>
/// <param name="ManagedObj">The managed object to be converted.</param>
/// <returns>Returns the COM view of the managed object.</returns>
public IntPtr MarshalManagedToNative(object ManagedObj) => throw new NotImplementedException();
/// <summary>Converts the unmanaged data to managed data.</summary>
/// <param name="pNativeData">A pointer to the unmanaged data to be wrapped.</param>
/// <returns>Returns the managed view of the COM data.</returns>
public object MarshalNativeToManaged(IntPtr pNativeData) => Marshal.PtrToStringUni(pNativeData);
}
internal class PeerStructMarshaler<T> : ICustomMarshaler where T : struct
{
internal PeerStructMarshaler()
{
}
public static ICustomMarshaler GetInstance(string _) => new PeerStructMarshaler<T>();
/// <summary>Performs necessary cleanup of the managed data when it is no longer needed.</summary>
/// <param name="ManagedObj">The managed object to be destroyed.</param>
public void CleanUpManagedData(object ManagedObj) { }
/// <summary>Performs necessary cleanup of the unmanaged data when it is no longer needed.</summary>
/// <param name="pNativeData">A pointer to the unmanaged data to be destroyed.</param>
public void CleanUpNativeData(IntPtr pNativeData) => PeerFreeData(pNativeData);
/// <summary>Returns the size of the native data to be marshaled.</summary>
/// <returns>The size in bytes of the native data.</returns>
public int GetNativeDataSize() => -1;
/// <summary>Converts the managed data to unmanaged data.</summary>
/// <param name="ManagedObj">The managed object to be converted.</param>
/// <returns>Returns the COM view of the managed object.</returns>
public IntPtr MarshalManagedToNative(object ManagedObj) => throw new NotImplementedException();
/// <summary>Converts the unmanaged data to managed data.</summary>
/// <param name="pNativeData">A pointer to the unmanaged data to be wrapped.</param>
/// <returns>Returns the managed view of the COM data.</returns>
public object MarshalNativeToManaged(IntPtr pNativeData) => Marshal.PtrToStructure(pNativeData, typeof(T));
}
/*
PeerPnrpEndResolve
PeerPnrpGetCloudInfo
PeerPnrpGetEndpoint
PeerPnrpRegister
PeerPnrpResolve
PeerPnrpStartResolve
PeerPnrpUnregister
PeerPnrpUpdateRegistration
PeerGraphAddRecord
PeerGraphClose
PeerGraphCloseDirectConnection
PeerGraphConnect
PeerGraphCreate
PeerGraphDelete
PeerGraphDeleteRecord
PeerGraphEndEnumeration
PeerGraphEnumConnections
PeerGraphEnumNodes
PeerGraphEnumRecords
PeerGraphExportDatabase
PeerGraphFreeData
PeerGraphGetEventData
PeerGraphGetItemCount
PeerGraphGetNextItem
PeerGraphGetNodeInfo
PeerGraphGetProperties
PeerGraphGetRecord
PeerGraphGetStatus
PeerGraphImportDatabase
PeerGraphListen
PeerGraphOpen
PeerGraphOpenDirectConnection
PeerGraphPeerTimeToUniversalTime
PeerGraphRegisterEvent
PeerGraphSearchRecords
PeerGraphSendData
PeerGraphSetNodeAttributes
PeerGraphSetPresence
PeerGraphSetProperties
PeerGraphUniversalTimeToPeerTime
PeerGraphUnregisterEvent
PeerGraphUpdateRecord
PeerGraphValidateDeferredRecords
*/
}
}

2617
PInvoke/P2P/P2P.Group.cs Normal file

File diff suppressed because it is too large Load Diff

616
PInvoke/P2P/P2P.Identity.cs Normal file
View File

@ -0,0 +1,616 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Vanara.Extensions;
using Vanara.InteropServices;
using static Vanara.PInvoke.AdvApi32;
using static Vanara.PInvoke.Crypt32;
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
namespace Vanara.PInvoke
{
/// <summary>Items from the P2P.dll</summary>
public static partial class P2P
{
/// <summary>
/// The <c>PeerCreatePeerName</c> function creates a new name based on the existing name of the specified peer identity and
/// classifier. However, a new identity is not created by a call to <c>PeerCreatePeerName</c>.
/// </summary>
/// <param name="pwzIdentity">
/// <para>
/// Specifies the identity to use as the basis for the new peer name. If pwzIdentity is <c>NULL</c>, the name created is not based
/// on any peer identity, and is therefore an unsecured name.
/// </para>
/// <para>This parameter can only be <c>NULL</c> if pwzClassifier is not <c>NULL</c>.</para>
/// </param>
/// <param name="pwzClassifier">
/// <para>
/// Pointer to the Unicode string that contains the new classifier. This classifier is appended to the existing authority portion of
/// the peer name of the specified identity. This string is 150 characters long, including the <c>NULL</c> terminator. Specify
/// <c>NULL</c> to return the peer name of the identity.
/// </para>
/// <para>This parameter can only be <c>NULL</c> if pwzIdentity is not <c>NULL</c>.</para>
/// </param>
/// <param name="ppwzPeerName">
/// Pointer that receives a pointer to the new peer name. When this string is not required anymore, free it by calling PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>The parameter ppwzPeername must be set to null before the <c>PeerCreatePeerName</c> function is called.</remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peercreatepeername NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerCreatePeerName( PCWSTR pwzIdentity, PCWSTR pwzClassifier, PWSTR *ppwzPeerName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerCreatePeerName")]
public static extern HRESULT PeerCreatePeerName([Optional, MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwzClassifier,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzPeerName);
/// <summary>
/// The <c>PeerEnumGroups</c> function creates and returns a peer enumeration handle used to enumerate all the peer groups
/// associated with a specific peer identity.
/// </summary>
/// <param name="pwzIdentity">Specifies the peer identity to enumerate groups for.</param>
/// <param name="phPeerEnum">
/// Receives a handle to the peer enumeration that contains the list of peer groups that the specified identity is a member of, with
/// each item represented as a pointer to a PEER_NAME_PAIR structure. Pass this handle to PeerGetNextItem to retrieve the items;
/// when finished, call PeerEndEnumeration release the memory.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is S_OK. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>The specified peer identity cannot be found.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Once the application has obtained the enumeration handle, use PeerGetNextItem and PeerGetItemCount to enumerate the peer groups.
/// </para>
/// <para>When enumerating peer groups, PeerGetNextItem returns an array of pointers to PEER_NAME_PAIR structures.</para>
/// <para>Call PeerEndEnumeration to free the peer enumeration handle when it is no longer required.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerenumgroups NOT_BUILD_WINDOWS_DEPRECATE HRESULT PeerEnumGroups(
// PCWSTR pwzIdentity, HPEERENUM *phPeerEnum );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerEnumGroups")]
public static extern HRESULT PeerEnumGroups([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity, out SafeHPEERENUM phPeerEnum);
/// <summary>The <c>PeerEnumGroups</c> function enumerates all the peer groups associated with a specific peer identity.</summary>
/// <param name="pwzIdentity">Specifies the peer identity to enumerate groups for.</param>
/// <returns>
/// The peer enumeration that contains the list of peer groups that the specified identity is a member of, with each item
/// represented as a pointer to a PEER_NAME_PAIR structure.
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerenumgroups NOT_BUILD_WINDOWS_DEPRECATE HRESULT PeerEnumGroups(
// PCWSTR pwzIdentity, HPEERENUM *phPeerEnum );
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerEnumGroups")]
public static IEnumerable<PEER_NAME_PAIR> PeerEnumGroups([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity) =>
PeerEnum<PEER_NAME_PAIR>(() => { PeerEnumGroups(pwzIdentity, out var h).ThrowIfFailed(); return h; });
/// <summary>
/// The <c>PeerEnumIdentities</c> function creates and returns a peer enumeration handle used to enumerate all the peer identities
/// that belong to a specific user.
/// </summary>
/// <param name="phPeerEnum">
/// Receives a handle to the peer enumeration that contains the list of peer identities, with each item represented as a pointer to
/// a PEER_NAME_PAIR structure. Pass this handle to PeerGetNextItem to retrieve the items; when finished, call PeerEndEnumeration to
/// release the memory.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is S_OK. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Once the application has obtained the peer enumeration handle, use PeerGetNextItem and PeerGetItemCount to enumerate the peer identities.
/// </para>
/// <para>When enumerating peer identities, PeerGetNextItem returns an array of pointers to PEER_NAME_PAIR structures.</para>
/// <para>Call PeerEndEnumeration to free the enumeration handle when it is no longer required.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerenumidentities NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerEnumIdentities( HPEERENUM *phPeerEnum );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerEnumIdentities")]
public static extern HRESULT PeerEnumIdentities(out SafeHPEERENUM phPeerEnum);
/// <summary>The <c>PeerEnumIdentities</c> function enumerates all the peer identities that belong to a specific user.</summary>
/// <returns>
/// The peer enumeration that contains the list of peer identities, with each item represented as a pointer to a PEER_NAME_PAIR
/// structure. ///
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peerenumidentities NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerEnumIdentities( HPEERENUM *phPeerEnum );
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerEnumIdentities")]
public static IEnumerable<PEER_NAME_PAIR> PeerEnumIdentities() =>
PeerEnum<PEER_NAME_PAIR>(() => { PeerEnumIdentities(out var h).ThrowIfFailed(); return h; });
/// <summary>
/// The <c>PeerIdentityCreate</c> function creates a new peer identity and returns its name. The name of the peer identity must be
/// passed in all subsequent calls to the Peer Identity Manager, Peer Grouping, or PNRP functions that operate on behalf of the peer
/// identity. The peer identity name specifies which peer identity is being used.
/// </summary>
/// <param name="pwzClassifier">
/// Specifies the classifier to append to the published peer identity name. This string is a Unicode string, and can be <c>NULL</c>.
/// This string can only be 150 characters long, including the <c>NULL</c> terminator.
/// </param>
/// <param name="pwzFriendlyName">
/// Specifies the friendly name of the peer identity. This is a Unicode string, and can be <c>NULL</c>. This string can only be 256
/// characters long, including the <c>NULL</c> terminator. If pwzFriendlyName is <c>NULL</c>, the name of the identity is the
/// friendly name. The friendly name is optional, and it does not have to be unique.
/// </param>
/// <param name="hCryptProv">
/// <para>
/// Handle to the cryptographic service provider (CSP) that contains an AT_KEYEXCHANGE key pair of at least 1024 bits in length.
/// This key pair is used as the basis for a new peer identity. If hCryptProv is zero (0), a new key pair is generated for the peer identity.
/// </para>
/// <para>
/// <c>Note</c> The Identity Manager API does not support a CSP that has user protected keys. If a CSP that has user protected keys
/// is used, <c>PeerIdentityCreate</c> returns <c>E_INVALIDARG</c>.
/// </para>
/// </param>
/// <param name="ppwzIdentity">
/// Receives a pointer to the name of an peer identity that is created. This name must be used in all subsequent calls to the Peer
/// Identity Manager, Peer Grouping, or PNRP functions that operate on behalf of the peer identity. Returns <c>NULL</c> if the peer
/// identity cannot be created.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>ERROR_INVALID_HANDLE</term>
/// <term>The handle to the key specified by hCryptProv is not valid.</term>
/// </item>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_ALREADY_EXISTS</term>
/// <term>The peer identity already exists. Only occurs if an peer identity based on the specified key and classifier already exists.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys is denied. Typically, this is caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been reset manually.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_TOO_MANY_IDENTITIES</term>
/// <term>The peer identity cannot be created because there are too many peer identities.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// The key pair and the classifier are used to generate the peer name of a new peer identity. After an peer identity is created, it
/// is automatically stored on the disk.
/// </para>
/// <para>
/// The name of the identity should be freed by using PeerFreeData. This does not delete the peer identity. To delete the identity,
/// use PeerIdentityDelete function.
/// </para>
/// <para>If hCryptProv is not <c>NULL</c>, it can be released by using CryptReleaseContext after the call returns.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitycreate NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityCreate( PCWSTR pwzClassifier, PCWSTR pwzFriendlyName, HCRYPTPROV hCryptProv, PWSTR *ppwzIdentity );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityCreate")]
public static extern HRESULT PeerIdentityCreate([Optional, MarshalAs(UnmanagedType.LPWStr)] string pwzClassifier,
[Optional, MarshalAs(UnmanagedType.LPWStr)] string pwzFriendlyName, [In, Optional] HCRYPTPROV hCryptProv,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzIdentity);
/// <summary>
/// The <c>PeerIdentityDelete</c> function permanently deletes a peer identity. This includes removing all certificates, private
/// keys, and all group information associated with a specified peer identity.
/// </summary>
/// <param name="pwzIdentity">Specifies a peer identity to delete.</param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>The parameter is not valid.</term>
/// </item>
/// <item>
/// <term>PEER_E_GROUPS_EXIST</term>
/// <term>
/// The peer identity cannot be deleted because it has peer groups associated with it. All peer groups associated with the specified
/// identity must be deleted by using PeerGroupDelete before a call to PeerIdentityDelete can succeed.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>A peer identity that matches the specified name cannot be found.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitydelete NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityDelete( PCWSTR pwzIdentity );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityDelete")]
public static extern HRESULT PeerIdentityDelete([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity);
/// <summary>
/// The <c>PeerIdentityExport</c> function allows a user to export one peer identity. The user can then transfer the peer identity
/// to a different computer.
/// </summary>
/// <param name="pwzIdentity">Specifies the peer identity to export. This parameter is required and does not have a default value.</param>
/// <param name="pwzPassword">
/// Specifies the password to use to encrypt the peer identity. This parameter cannot be <c>NULL</c>. This password must also be
/// used to import the peer identity, or the import operation fails.
/// </param>
/// <param name="ppwzExportXML">
/// Receives a pointer to the exported peer identity in XML format. If the export operation is successful, the application must free
/// ppwzExportXML by calling PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys was denied. This is typically caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been manually reset.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>The specified peer identity does not exist.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// Peer-to-peer group membership credentials are not exported. Only one peer identity is exported. An exported peer identity can be
/// imported on another computer by using PeerIdentityImport.
/// </para>
/// <para>
/// Exporting a peer identity does not remove it from a local ccmputer, it makes a copy of it. The copy can be used to backup and
/// restore a peer identity.
/// </para>
/// <para>The XML fragment used by <c>PeerIdentityExport</c> is as follows:</para>
/// <para>
/// <code>&lt;PEERIDENTITYEXPORT VERSION="1.0"&gt; &lt;PEERNAME&gt; &lt;!-- UTF-8 encoded peer name of the identity --&gt; &lt;/PEERNAME&gt; &lt;DATA xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64"&gt; &lt;!-- base64 encoded / PFX encoded and encrypted IDC with the private key --&gt; &lt;/DATA&gt; &lt;/PEERIDENTITYEXPORT&gt;</code>
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentityexport NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityExport( PCWSTR pwzIdentity, PCWSTR pwzPassword, PWSTR *ppwzExportXML );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityExport")]
public static extern HRESULT PeerIdentityExport([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity, [MarshalAs(UnmanagedType.LPWStr)] string pwzPassword,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzExportXML);
/// <summary>The <c>PeerIdentityGetCryptKey</c> function retrieves a handle to a cryptographic service provider (CSP).</summary>
/// <param name="pwzIdentity">Specifies the peer identity to retrieve the key pair for.</param>
/// <param name="phCryptProv">
/// Receives a pointer to the handle of the cryptographic service provider (CSP) that contains an AT_KEYEXCHANGE RSA key pair.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys is denied. Typically, this is caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been manually reset.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>An identity that matches the specified name cannot be found.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>The key can be retrieved by calling CryptGetUserKey.</para>
/// <para>When the handle is not required anymore, the application is responsible for releasing the handle by using <see cref="CryptReleaseContext"/>.</para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitygetcryptkey NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityGetCryptKey( PCWSTR pwzIdentity, HCRYPTPROV *phCryptProv );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityGetCryptKey")]
public static extern HRESULT PeerIdentityGetCryptKey([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity, out SafeHCRYPTPROV phCryptProv);
/// <summary>The <c>PeerIdentityGetDefault</c> function retrieves the default peer name set for the current user.</summary>
/// <param name="ppwzPeerName">
/// Pointer to the address of a zero-terminated Unicode string that contains the default name of the current user.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>A peer identity that matches the specified name cannot be found.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitygetdefault NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityGetDefault( PWSTR *ppwzPeerName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityGetDefault")]
public static extern HRESULT PeerIdentityGetDefault([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzPeerName);
/// <summary>The <c>PeerIdentityGetFriendlyName</c> function returns the friendly name of the peer identity.</summary>
/// <param name="pwzIdentity">Specifies the peer identity to obtain a friendly name.</param>
/// <param name="ppwzFriendlyName">
/// Receives a pointer to the friendly name. When ppwzFriendlyName is not required anymore, the application is responsible for
/// freeing this string by calling PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys is denied. Typically, this is caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been reset manually.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>A peer identity that matches the specified name cannot be found.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitygetfriendlyname NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityGetFriendlyName( PCWSTR pwzIdentity, PWSTR *ppwzFriendlyName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityGetFriendlyName")]
public static extern HRESULT PeerIdentityGetFriendlyName([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzFriendlyName);
/// <summary>
/// The <c>PeerIdentityGetXML</c> function returns a description of the peer identity, which can then be passed to third parties and
/// used to invite a peer identity into a peer group. This information is returned as an XML fragment.
/// </summary>
/// <param name="pwzIdentity">
/// Specifies the peer identity to retrieve peer identity information for. When this parameter is passed as <c>NULL</c>, a "default"
/// identity will be generated for the user by the peer infrastructure.
/// </param>
/// <param name="ppwzIdentityXML">
/// Pointer to a pointer to a Unicode string that contains the XML fragment. When ppwzIdentityXML is no longer required, the
/// application is responsible for freeing this string by calling PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is S_OK. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_HANDLE</term>
/// <term>The handle to the identity is invalid.</term>
/// </item>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>The XML fragment returned has the following structure:</para>
/// <para>
/// <code>&lt;PEERIDENTITYINFO VERSION="1.0"&gt; &lt;IDC xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64"&gt; Base 64 encoded certificate. &lt;/IDC&gt; &lt;/PEERIDENTITYINFO&gt;</code>
/// </para>
/// <para>This XML fragment is used when creating an invitation to join a group.</para>
/// <para>
/// Applications are not allowed to add tags within the <c>PEERIDENTITYINFO</c> tag or modify this XML fragment in any way.
/// Applications are allowed to incorporate this XML fragment into other XML documents, but must strip out all application-specific
/// XML before passing this fragment to the PeerGroupCreateInvitation.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitygetxml NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityGetXML( PCWSTR pwzIdentity, PWSTR *ppwzIdentityXML );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityGetXML")]
public static extern HRESULT PeerIdentityGetXML([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzIdentityXML);
/// <summary>
/// The <c>PeerIdentityImport</c> function imports one peer identity. If the peer identity exists on a computer,
/// <c>PEER_E_ALREADY_EXISTS</c> is returned.
/// </summary>
/// <param name="pwzImportXML">
/// Pointer to the XML format peer identity to import, which is returned by PeerIdentityExport. This binary data must match the
/// exported data byte-for-byte. The XML must remain valid XML with no extra characters.
/// </param>
/// <param name="pwzPassword">
/// Specifies the password to use to de-crypt a peer identity. The password must be identical to the password supplied to
/// PeerIdentityExport. This parameter cannot be <c>NULL</c>.
/// </param>
/// <param name="ppwzIdentity">
/// Pointer to a string that represents a peer identity that is imported. If the import operation is successful, the application
/// must free ppwzIdentity by calling PeerFreeData.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid, or the XML data in ppwzImportXML has been tampered with.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_ALREADY_EXISTS</term>
/// <term>The peer identity already exists on this computer.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys is denied. Typically, this is caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been reset manually.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>The XML fragment used by <c>PeerIdentityImport</c> is as follows:</para>
/// <para>
/// <code>&lt;PEERIDENTITYEXPORT VERSION="1.0"&gt; &lt;IDENTITY&gt; &lt;!-- UTF-8 encoded peer name of the identity --&gt; &lt;/IDENTITY&gt; &lt;IDENTITYDATA xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64"&gt; &lt;!-- base64 encoded / PFX encoded and encrypted IDC with the private key --&gt; &lt;/IDENTTYDATA&gt; &lt;/PEERIDENTITYEXPORT&gt;</code>
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentityimport NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentityImport( PCWSTR pwzImportXML, PCWSTR pwzPassword, PWSTR *ppwzIdentity );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentityImport")]
public static extern HRESULT PeerIdentityImport([MarshalAs(UnmanagedType.LPWStr)] string pwzImportXML, [MarshalAs(UnmanagedType.LPWStr)] string pwzPassword,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(PeerStringMarshaler))] out string ppwzIdentity);
/// <summary>
/// The <c>PeerIdentitySetFriendlyName</c> function modifies the friendly name for a specified peer identity. The friendly name is
/// the human-readable name.
/// </summary>
/// <param name="pwzIdentity">Specifies a peer identity to modify.</param>
/// <param name="pwzFriendlyName">
/// Specifies a new friendly name. Specify <c>NULL</c> or an empty string to reset a friendly name to the default value, which is
/// the Unicode version of the peer name.
/// </param>
/// <returns>
/// <para>If the function call succeeds, the return value is <c>S_OK</c>. Otherwise, it returns one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Return code</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>There is not enough memory to perform the specified operation.</term>
/// </item>
/// <item>
/// <term>PEER_E_NO_KEY_ACCESS</term>
/// <term>
/// Access to the peer identity or peer group keys is denied. Typically, this is caused by an incorrect access control list (ACL)
/// for the folder that contains the user or computer keys. This can happen when the ACL has been reset manually.
/// </term>
/// </item>
/// <item>
/// <term>PEER_E_NOT_FOUND</term>
/// <term>A peer identity that matches a specified name cannot be found.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/p2p/nf-p2p-peeridentitysetfriendlyname NOT_BUILD_WINDOWS_DEPRECATE HRESULT
// PeerIdentitySetFriendlyName( PCWSTR pwzIdentity, PCWSTR pwzFriendlyName );
[DllImport(Lib_P2P, SetLastError = false, ExactSpelling = true)]
[PInvokeData("p2p.h", MSDNShortId = "NF:p2p.PeerIdentitySetFriendlyName")]
public static extern HRESULT PeerIdentitySetFriendlyName([MarshalAs(UnmanagedType.LPWStr)] string pwzIdentity, [Optional, MarshalAs(UnmanagedType.LPWStr)] string pwzFriendlyName);
}
}

2877
PInvoke/P2P/P2P.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<ProjectExtensions>
<SupportedDlls>P2P.dll</SupportedDlls>
</ProjectExtensions>
<PropertyGroup>
<Description>PInvoke API (methods, structures and constants) imported from Windows P2P.dll.</Description>
<AssemblyTitle>$(AssemblyName)</AssemblyTitle>
<TargetFrameworks>net20;net35;net40;net45;netstandard2.0;netcoreapp2.0;netcoreapp2.1;netcoreapp3.0;netcoreapp3.1</TargetFrameworks>
<AssemblyName>Vanara.PInvoke.P2P</AssemblyName>
<PackageId>$(AssemblyName)</PackageId>
<PackageTags>pinvoke;vanara;net-extensions;interop;P2P</PackageTags>
<PackageReleaseNotes>Currently implements:
Functions
DllMain, PeerCollabAddContact, PeerCollabAsyncInviteContact, PeerCollabAsyncInviteEndpoint, PeerCollabCancelInvitation, PeerCollabCloseHandle, PeerCollabDeleteContact, PeerCollabDeleteEndpointData, PeerCollabDeleteObject, PeerCollabEnumApplicationRegistrationInfo, PeerCollabEnumApplications, PeerCollabEnumContacts, PeerCollabEnumEndpoints, PeerCollabEnumObjects, PeerCollabEnumPeopleNearMe, PeerCollabExportContact, PeerCollabGetAppLaunchInfo, PeerCollabGetApplicationRegistrationInfo, PeerCollabGetContact, PeerCollabGetEndpointName, PeerCollabGetEventData, PeerCollabGetInvitationResponse, PeerCollabGetPresenceInfo, PeerCollabGetSigninOptions, PeerCollabInviteContact, PeerCollabInviteEndpoint, PeerCollabParseContact, PeerCollabQueryContactData, PeerCollabRefreshEndpointData, PeerCollabRegisterApplication, PeerCollabRegisterEvent, PeerCollabSetEndpointName, PeerCollabSetObject, PeerCollabSetPresenceInfo, PeerCollabShutdown, PeerCollabSignin, PeerCollabSignout, PeerCollabStartup, PeerCollabSubscribeEndpointData, PeerCollabUnregisterApplication, PeerCollabUnregisterEvent, PeerCollabUnsubscribeEndpointData, PeerCollabUpdateContact, PeerCreatePeerName, PeerEndEnumeration, PeerEnumGroups, PeerEnumIdentities, PeerFreeData, PeerGetItemCount, PeerGetNextItem, PeerGraphShutdown, PeerGraphStartup, PeerGroupAddRecord, PeerGroupClose, PeerGroupCloseDirectConnection, PeerGroupConnect, PeerGroupConnectByAddress, PeerGroupCreate, PeerGroupCreateInvitation, PeerGroupCreatePasswordInvitation, PeerGroupDelete, PeerGroupDeleteRecord, PeerGroupEnumConnections, PeerGroupEnumMembers, PeerGroupEnumRecords, PeerGroupExportConfig, PeerGroupExportDatabase, PeerGroupGetEventData, PeerGroupGetProperties, PeerGroupGetRecord, PeerGroupGetStatus, PeerGroupHandlePowerEvent, PeerGroupImportConfig, PeerGroupImportDatabase, PeerGroupIssueCredentials, PeerGroupJoin, PeerGroupOpen, PeerGroupOpenDirectConnection, PeerGroupParseInvitation, PeerGroupPasswordJoin, PeerGroupPeerTimeToUniversalTime, PeerGroupRegisterEvent, PeerGroupResumePasswordAuthentication, PeerGroupSearchRecords, PeerGroupSendData, PeerGroupSetProperties, PeerGroupShutdown, PeerGroupStartup, PeerGroupUniversalTimeToPeerTime, PeerGroupUnregisterEvent, PeerGroupUpdateRecord, PeerHostNameToPeerName, PeerIdentityCreate, PeerIdentityDelete, PeerIdentityExport, PeerIdentityGetCert, PeerIdentityGetCryptKey, PeerIdentityGetDefault, PeerIdentityGetFriendlyName, PeerIdentityGetXML, PeerIdentityImport, PeerIdentitySetFriendlyName, PeerNameToPeerHostName, PeerPnrpEndResolve, PeerPnrpGetCloudInfo, PeerPnrpGetEndpoint, PeerPnrpRegister, PeerPnrpResolve, PeerPnrpShutdown, PeerPnrpStartResolve, PeerPnrpStartup, PeerPnrpUnregister, PeerPnrpUpdateRegistration, PeerSSPAddCredentials, PeerSSPRemoveCredentials
Structures
HPEEREVENT, HGRAPH, PEER_ADDRESS, PEER_APP_LAUNCH_INFO, PEER_APPLICATION, PEER_APPLICATION_REGISTRATION_INFO, PEER_COLLAB_EVENT_DATA, PEER_COLLAB_EVENT_REGISTRATION, PEER_CONNECTION_INFO, PEER_CONTACT, PEER_CREDENTIAL_INFO, PEER_DATA, PEER_ENDPOINT, PEER_EVENT_APPLICATION_CHANGED_DATA, PEER_EVENT_CONNECTION_CHANGE_DATA, PEER_EVENT_ENDPOINT_CHANGED_DATA, PEER_EVENT_INCOMING_DATA, PEER_EVENT_MEMBER_CHANGE_DATA, PEER_EVENT_NODE_CHANGE_DATA, PEER_EVENT_OBJECT_CHANGED_DATA, PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA, PEER_EVENT_PRESENCE_CHANGED_DATA, PEER_EVENT_RECORD_CHANGE_DATA, PEER_EVENT_REQUEST_STATUS_CHANGED_DATA, PEER_EVENT_SYNCHRONIZED_DATA, PEER_EVENT_WATCHLIST_CHANGED_DATA, PEER_GRAPH_EVENT_DATA, PEER_GRAPH_EVENT_REGISTRATION, PEER_GRAPH_PROPERTIES, PEER_GROUP_EVENT_DATA, PEER_GROUP_EVENT_REGISTRATION, PEER_GROUP_PROPERTIES, PEER_INVITATION, PEER_INVITATION_INFO, PEER_INVITATION_RESPONSE, PEER_MEMBER, PEER_NAME_PAIR, PEER_NODE_INFO, PEER_OBJECT, PEER_PEOPLE_NEAR_ME, PEER_PNRP_CLOUD_INFO, PEER_PNRP_ENDPOINT_INFO, PEER_PNRP_REGISTRATION_INFO, PEER_PRESENCE_INFO, PEER_RECORD, PEER_SECURITY_INTERFACE, PEER_VERSION_DATA, HPEERENUM, HGROUP
</PackageReleaseNotes>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Core\Vanara.Core.csproj" />
<ProjectReference Include="..\Cryptography\Vanara.PInvoke.Cryptography.csproj" />
<ProjectReference Include="..\Security\Vanara.PInvoke.Security.csproj" />
<ProjectReference Include="..\Shared\Vanara.PInvoke.Shared.csproj" />
<ProjectReference Include="..\Ws2_32\Vanara.PInvoke.Ws2_32.csproj" />
</ItemGroup>
</Project>

View File

@ -9004,6 +9004,257 @@ namespace Vanara.PInvoke
/// <summary>The directory being processed is not empty</summary>
public const int COPYENGINE_E_DIR_NOT_EMPTY = unchecked((int)0x8027003D);
/// <summary>The IPv6 protocol is not installed.</summary>
public const int PEER_E_IPV6_NOT_INSTALLED = unchecked((int)0x80630001);
/// <summary>The component has not been initialized.</summary>
public const int PEER_E_NOT_INITIALIZED = unchecked((int)0x80630002);
/// <summary>The required service cannot be started.</summary>
public const int PEER_E_CANNOT_START_SERVICE = unchecked((int)0x80630003);
/// <summary>The P2P protocol is not licensed to run on this OS.</summary>
public const int PEER_E_NOT_LICENSED = unchecked((int)0x80630004);
/// <summary>The graph handle is invalid.</summary>
public const int PEER_E_INVALID_GRAPH = unchecked((int)0x80630010);
/// <summary>The graph database name has changed.</summary>
public const int PEER_E_DBNAME_CHANGED = unchecked((int)0x80630011);
/// <summary>A graph with the same ID already exists.</summary>
public const int PEER_E_DUPLICATE_GRAPH = unchecked((int)0x80630012);
/// <summary>The graph is not ready.</summary>
public const int PEER_E_GRAPH_NOT_READY = unchecked((int)0x80630013);
/// <summary>The graph is shutting down.</summary>
public const int PEER_E_GRAPH_SHUTTING_DOWN = unchecked((int)0x80630014);
/// <summary>The graph is still in use.</summary>
public const int PEER_E_GRAPH_IN_USE = unchecked((int)0x80630015);
/// <summary>The graph database is corrupt.</summary>
public const int PEER_E_INVALID_DATABASE = unchecked((int)0x80630016);
/// <summary>Too many attributes have been used.</summary>
public const int PEER_E_TOO_MANY_ATTRIBUTES = unchecked((int)0x80630017);
/// <summary>The connection can not be found.</summary>
public const int PEER_E_CONNECTION_NOT_FOUND = unchecked((int)0x80630103);
/// <summary>The peer attempted to connect to itself.</summary>
public const int PEER_E_CONNECT_SELF = unchecked((int)0x80630106);
/// <summary>The peer is already listening for connections.</summary>
public const int PEER_E_ALREADY_LISTENING = unchecked((int)0x80630107);
/// <summary>The node was not found.</summary>
public const int PEER_E_NODE_NOT_FOUND = unchecked((int)0x80630108);
/// <summary>The Connection attempt failed.</summary>
public const int PEER_E_CONNECTION_FAILED = unchecked((int)0x80630109);
/// <summary>The peer connection could not be authenticated.</summary>
public const int PEER_E_CONNECTION_NOT_AUTHENTICATED = unchecked((int)0x8063010A);
/// <summary>The connection was refused.</summary>
public const int PEER_E_CONNECTION_REFUSED = unchecked((int)0x8063010B);
/// <summary>The peer name classifier is too long.</summary>
public const int PEER_E_CLASSIFIER_TOO_LONG = unchecked((int)0x80630201);
/// <summary>The maximum number of identities have been created.</summary>
public const int PEER_E_TOO_MANY_IDENTITIES = unchecked((int)0x80630202);
/// <summary>Unable to access a key.</summary>
public const int PEER_E_NO_KEY_ACCESS = unchecked((int)0x80630203);
/// <summary>The group already exists.</summary>
public const int PEER_E_GROUPS_EXIST = unchecked((int)0x80630204);
/// <summary>The requested record could not be found.</summary>
public const int PEER_E_RECORD_NOT_FOUND = unchecked((int)0x80630301);
/// <summary>Access to the database was denied.</summary>
public const int PEER_E_DATABASE_ACCESSDENIED = unchecked((int)0x80630302);
/// <summary>The Database could not be initialized.</summary>
public const int PEER_E_DBINITIALIZATION_FAILED = unchecked((int)0x80630303);
/// <summary>The record is too big.</summary>
public const int PEER_E_MAX_RECORD_SIZE_EXCEEDED = unchecked((int)0x80630304);
/// <summary>The database already exists.</summary>
public const int PEER_E_DATABASE_ALREADY_PRESENT = unchecked((int)0x80630305);
/// <summary>The database could not be found.</summary>
public const int PEER_E_DATABASE_NOT_PRESENT = unchecked((int)0x80630306);
/// <summary>The identity could not be found.</summary>
public const int PEER_E_IDENTITY_NOT_FOUND = unchecked((int)0x80630401);
/// <summary>The event handle could not be found.</summary>
public const int PEER_E_EVENT_HANDLE_NOT_FOUND = unchecked((int)0x80630501);
/// <summary>Invalid search.</summary>
public const int PEER_E_INVALID_SEARCH = unchecked((int)0x80630601);
/// <summary>The search attributes are invalid.</summary>
public const int PEER_E_INVALID_ATTRIBUTES = unchecked((int)0x80630602);
/// <summary>The invitation is not trusted.</summary>
public const int PEER_E_INVITATION_NOT_TRUSTED = unchecked((int)0x80630701);
/// <summary>The certchain is too long.</summary>
public const int PEER_E_CHAIN_TOO_LONG = unchecked((int)0x80630703);
/// <summary>The time period is invalid.</summary>
public const int PEER_E_INVALID_TIME_PERIOD = unchecked((int)0x80630705);
/// <summary>A circular cert chain was detected.</summary>
public const int PEER_E_CIRCULAR_CHAIN_DETECTED = unchecked((int)0x80630706);
/// <summary>The certstore is corrupted.</summary>
public const int PEER_E_CERT_STORE_CORRUPTED = unchecked((int)0x80630801);
/// <summary>The specified PNRP cloud does not exist.</summary>
public const int PEER_E_NO_CLOUD = unchecked((int)0x80631001);
/// <summary>The cloud name is ambiguous.</summary>
public const int PEER_E_CLOUD_NAME_AMBIGUOUS = unchecked((int)0x80631005);
/// <summary>The record is invalid.</summary>
public const int PEER_E_INVALID_RECORD = unchecked((int)0x80632010);
/// <summary>Not authorized.</summary>
public const int PEER_E_NOT_AUTHORIZED = unchecked((int)0x80632020);
/// <summary>The password does not meet policy requirements.</summary>
public const int PEER_E_PASSWORD_DOES_NOT_MEET_POLICY = unchecked((int)0x80632021);
/// <summary>The record validation has been deferred.</summary>
public const int PEER_E_DEFERRED_VALIDATION = unchecked((int)0x80632030);
/// <summary>The group properties are invalid.</summary>
public const int PEER_E_INVALID_GROUP_PROPERTIES = unchecked((int)0x80632040);
/// <summary>The peername is invalid.</summary>
public const int PEER_E_INVALID_PEER_NAME = unchecked((int)0x80632050);
/// <summary>The classifier is invalid.</summary>
public const int PEER_E_INVALID_CLASSIFIER = unchecked((int)0x80632060);
/// <summary>The friendly name is invalid.</summary>
public const int PEER_E_INVALID_FRIENDLY_NAME = unchecked((int)0x80632070);
/// <summary>Invalid role property.</summary>
public const int PEER_E_INVALID_ROLE_PROPERTY = unchecked((int)0x80632071);
/// <summary>Invalid classifier property.</summary>
public const int PEER_E_INVALID_CLASSIFIER_PROPERTY = unchecked((int)0x80632072);
/// <summary>Invalid record expiration.</summary>
public const int PEER_E_INVALID_RECORD_EXPIRATION = unchecked((int)0x80632080);
/// <summary>Invalid credential info.</summary>
public const int PEER_E_INVALID_CREDENTIAL_INFO = unchecked((int)0x80632081);
/// <summary>Invalid credential.</summary>
public const int PEER_E_INVALID_CREDENTIAL = unchecked((int)0x80632082);
/// <summary>Invalid record size.</summary>
public const int PEER_E_INVALID_RECORD_SIZE = unchecked((int)0x80632083);
/// <summary>Unsupported version.</summary>
public const int PEER_E_UNSUPPORTED_VERSION = unchecked((int)0x80632090);
/// <summary>The group is not ready.</summary>
public const int PEER_E_GROUP_NOT_READY = unchecked((int)0x80632091);
/// <summary>The group is still in use.</summary>
public const int PEER_E_GROUP_IN_USE = unchecked((int)0x80632092);
/// <summary>The group is invalid.</summary>
public const int PEER_E_INVALID_GROUP = unchecked((int)0x80632093);
/// <summary>No members were found.</summary>
public const int PEER_E_NO_MEMBERS_FOUND = unchecked((int)0x80632094);
/// <summary>There are no member connections.</summary>
public const int PEER_E_NO_MEMBER_CONNECTIONS = unchecked((int)0x80632095);
/// <summary>Unable to listen.</summary>
public const int PEER_E_UNABLE_TO_LISTEN = unchecked((int)0x80632096);
/// <summary>The identity does not exist.</summary>
public const int PEER_E_IDENTITY_DELETED = unchecked((int)0x806320A0);
/// <summary>The service is not available.</summary>
public const int PEER_E_SERVICE_NOT_AVAILABLE = unchecked((int)0x806320A1);
/// <summary>THe contact could not be found.</summary>
public const int PEER_E_CONTACT_NOT_FOUND = unchecked((int)0x80636001);
/// <summary>The graph data was created.</summary>
public const int PEER_S_GRAPH_DATA_CREATED = unchecked((int)0x00630001);
/// <summary>There is not more event data.</summary>
public const int PEER_S_NO_EVENT_DATA = unchecked((int)0x00630002);
/// <summary>The graph is already connect.</summary>
public const int PEER_S_ALREADY_CONNECTED = unchecked((int)0x00632000);
/// <summary>The subscription already exists.</summary>
public const int PEER_S_SUBSCRIPTION_EXISTS = unchecked((int)0x00636000);
/// <summary>No connectivity.</summary>
public const int PEER_S_NO_CONNECTIVITY = unchecked((int)0x00630005);
/// <summary>Already a member.</summary>
public const int PEER_S_ALREADY_A_MEMBER = unchecked((int)0x00630006);
/// <summary>The peername could not be converted to a DNS pnrp name.</summary>
public const int PEER_E_CANNOT_CONVERT_PEER_NAME = unchecked((int)0x80634001);
/// <summary>Invalid peer host name.</summary>
public const int PEER_E_INVALID_PEER_HOST_NAME = unchecked((int)0x80634002);
/// <summary>No more data could be found.</summary>
public const int PEER_E_NO_MORE = unchecked((int)0x80634003);
/// <summary>The existing peer name is already registered.</summary>
public const int PEER_E_PNRP_DUPLICATE_PEER_NAME = unchecked((int)0x80634005);
/// <summary>The app invite request was cancelled by the user.</summary>
public const int PEER_E_INVITE_CANCELLED = unchecked((int)0x80637000);
/// <summary>No response of the invite was received.</summary>
public const int PEER_E_INVITE_RESPONSE_NOT_AVAILABLE = unchecked((int)0x80637001);
/// <summary>User is not signed into serverless presence.</summary>
public const int PEER_E_NOT_SIGNED_IN = unchecked((int)0x80637003);
/// <summary>The user declined the privacy policy prompt.</summary>
public const int PEER_E_PRIVACY_DECLINED = unchecked((int)0x80637004);
/// <summary>A timeout occurred.</summary>
public const int PEER_E_TIMEOUT = unchecked((int)0x80637005);
/// <summary>The address is invalid.</summary>
public const int PEER_E_INVALID_ADDRESS = unchecked((int)0x80637007);
/// <summary>A required firewall exception is disabled.</summary>
public const int PEER_E_FW_EXCEPTION_DISABLED = unchecked((int)0x80637008);
/// <summary>The service is blocked by a firewall policy.</summary>
public const int PEER_E_FW_BLOCKED_BY_POLICY = unchecked((int)0x80637009);
/// <summary>Firewall exceptions are disabled.</summary>
public const int PEER_E_FW_BLOCKED_BY_SHIELDS_UP = unchecked((int)0x8063700A);
/// <summary>The user declined to enable the firewall exceptions.</summary>
public const int PEER_E_FW_DECLINED = unchecked((int)0x8063700B);
/// <summary>The IAudioClient object is already initialized.</summary>
public static readonly HRESULT AUDCLNT_E_ALREADY_INITIALIZED = AUDCLNT_ERR(0x002);

View File

@ -70,6 +70,7 @@ ntdsapi.dll | [Vanara.PInvoke.NTDSApi](https://github.com/dahall/Vanara/blob/mas
ole32.dll, oleaut32.dll, propsys.dll | [Vanara.PInvoke.Ole](https://github.com/dahall/Vanara/blob/master/PInvoke/Ole/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/82%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.Ole?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.Ole?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.Ole)
oleacc.dll | [Vanara.PInvoke.Accessibility](https://github.com/dahall/Vanara/blob/master/PInvoke/Accessibility/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.Accessibility?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.Accessibility?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.Accessibility)
opcservices.dll | [Vanara.PInvoke.Opc](https://github.com/dahall/Vanara/blob/master/PInvoke/Opc/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.Opc?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.Opc?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.Opc)
P2P.dll | [Vanara.PInvoke.P2P](https://github.com/dahall/Vanara/blob/master/PInvoke/P2P/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/87%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.P2P?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.P2P?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.P2P)
pdh.dll | [Vanara.PInvoke.Pdh](https://github.com/dahall/Vanara/blob/master/PInvoke/Pdh/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.Pdh?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.Pdh?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.Pdh)
powrprof.dll | [Vanara.PInvoke.PowrProf](https://github.com/dahall/Vanara/blob/master/PInvoke/PowrProf/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.PowrProf?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.PowrProf?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.PowrProf)
ProjectedFSLib.dll | [Vanara.PInvoke.ProjectedFSLib](https://github.com/dahall/Vanara/blob/master/PInvoke/ProjectedFSLib/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg?style=flat-square) | [![Nuget](https://img.shields.io/nuget/v/Vanara.PInvoke.ProjectedFSLib?label=%20&logo=nuget&style=flat-square)![Nuget](https://img.shields.io/nuget/dt/Vanara.PInvoke.ProjectedFSLib?label=%20&style=flat-square)](https://www.nuget.org/packages/Vanara.PInvoke.ProjectedFSLib)

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="16.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<AssemblyName>UnitTest.PInvoke.P2P</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x64</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Core\Vanara.Core.csproj">
<Project>{241f73ee-9298-45c9-b869-a045dff94c03}</Project>
<Name>Vanara.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\PInvoke\P2P\Vanara.PInvoke.P2P.csproj">
<Project>{200d7e57-452a-4a43-a96d-386f7c49e7ba}</Project>
<Name>Vanara.PInvoke.P2P</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\PInvoke\Shared\Vanara.PInvoke.Shared.csproj">
<Project>{a5e519e9-feba-4fe3-93a5-b8269bef72f4}</Project>
<Name>Vanara.PInvoke.Shared</Name>
</ProjectReference>
<ProjectReference Include="..\..\CSharpRunner\Shared.csproj">
<Project>{a96cff10-0967-429a-8700-4a86c97c5603}</Project>
<Name>Shared</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="NUnit">
<Version>3.12.0</Version>
</PackageReference>
<PackageReference Include="NUnit3TestAdapter">
<Version>3.16.1</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Compile Include="P2PTests.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,43 @@
using NUnit.Framework;
using NUnit.Framework.Internal;
using System;
using System.Runtime.InteropServices;
using static Vanara.PInvoke.P2P;
namespace Vanara.PInvoke.Tests
{
[TestFixture]
public class P2PTests
{
[OneTimeSetUp]
public void _Setup()
{
//PeerCollabStartup().ThrowIfFailed();
//PeerPnrpStartup().ThrowIfFailed();
}
[OneTimeTearDown]
public void _TearDown()
{
//PeerPnrpShutdown();
//PeerCollabShutdown();
}
[Test]
public void PeerCollabEnumApplicationsTest()
{
var e = PeerCollabEnumApplications();
Assert.NotNull(e);
e.WriteValues();
}
[Test]
public void EndpointNameTest()
{
Assert.That(PeerCollabGetEndpointName(out var name), ResultIs.Successful);
const string bogusName = "aksjdhflkajsdfkjahsdfkjhsdf";
Assert.That(PeerCollabSetEndpointName(bogusName), ResultIs.Successful);
Assert.That(PeerCollabSetEndpointName(name), ResultIs.Successful);
}
}
}

View File

@ -42,6 +42,7 @@
<dependency id="Vanara.PInvoke.NTDSApi" version="3.2.15" />
<dependency id="Vanara.PInvoke.Ole" version="3.2.15" />
<dependency id="Vanara.PInvoke.Opc" version="3.2.15" />
<dependency id="Vanara.PInvoke.P2P" version="3.2.15" />
<dependency id="Vanara.PInvoke.Pdh" version="3.2.15" />
<dependency id="Vanara.PInvoke.PowrProf" version="3.2.15" />
<dependency id="Vanara.PInvoke.Printing" version="3.2.15" />

View File

@ -239,6 +239,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.DbgHelp", "P
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbgHelp", "UnitTests\PInvoke\DbgHelp\DbgHelp.csproj", "{F2C94926-224F-43AB-B351-C20C9B2D8656}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.P2P", "PInvoke\P2P\Vanara.PInvoke.P2P.csproj", "{200D7E57-452A-4A43-A96D-386F7C49E7BA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P2P", "UnitTests\PInvoke\P2P\P2P.csproj", "{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -765,6 +769,16 @@ Global
{F2C94926-224F-43AB-B351-C20C9B2D8656}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2C94926-224F-43AB-B351-C20C9B2D8656}.DebugNoTests|Any CPU.ActiveCfg = Debug|Any CPU
{F2C94926-224F-43AB-B351-C20C9B2D8656}.Release|Any CPU.ActiveCfg = Release|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.DebugNoTests|Any CPU.ActiveCfg = Debug|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.DebugNoTests|Any CPU.Build.0 = Debug|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{200D7E57-452A-4A43-A96D-386F7C49E7BA}.Release|Any CPU.Build.0 = Release|Any CPU
{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}.DebugNoTests|Any CPU.ActiveCfg = Debug|Any CPU
{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -867,6 +881,8 @@ Global
{E753F3A4-2A0B-49E2-9611-4F35534B5F72} = {385CAD2D-0A5E-4F80-927B-D5499D126B90}
{69604ECE-B123-4328-BEC3-996CCF22DB90} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
{F2C94926-224F-43AB-B351-C20C9B2D8656} = {385CAD2D-0A5E-4F80-927B-D5499D126B90}
{200D7E57-452A-4A43-A96D-386F7C49E7BA} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D} = {385CAD2D-0A5E-4F80-927B-D5499D126B90}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {543FAC75-2AF1-4EF1-9609-B242B63FEED4}