Enumerating People near me in Microsoft Windows Vista Beta 1

Now that we have learned how to Sign in, we can see who else is signed in

 

HRESULT WINAPI PeerCollabEnumEndpointsNearMe(

HPEERENUM* phPeerEnum
);
(this seems to be missing from the MSDN documentation! Bug filed!)

 

 

This returns a PeerEnumeration handle on which you can call

 

HRESULT WINAPI PeerGetItemCount(
HPEERENUM hPeerEnum ,
PULONG
pCount
);

https://windowssdk.msdn.microsoft.com/library/en-us/P2PSDK/p2p/peergetitemcount.asp

 

 

To get the number of endpoints available

 

Or

 

HRESULT WINAPI PeerEndEnumeration(
HPEERENUM hPeerEnum
);

https://windowssdk.msdn.microsoft.com/library/en-us/P2PSDK/p2p/peergetnextitem.asp

 

To end the enumeration once you are done with it.

 

Or, the most interesting thing you can do to an enumeration handle is get the stuff from the enumeration!

 

HRESULT WINAPI PeerGetNextItem(
HPEERENUM hPeerEnum ,
PULONG
pCount ,
PVOID*
ppvItems );
https://windowssdk.msdn.microsoft.com/library/en-us/P2PSDK/p2p/peergetnextitem.asp

 

Note that this api returns memory that you have to free with

VOID WINAPI PeerFreeData(
PVOID pvData
);

https://windowssdk.msdn.microsoft.com/library/en-us/P2PSDK/p2p/peerfreedata.asp

 

Let's enumerate some people near me!

 

HRESULT EnumeratePeopleNearMe()

{

HRESULT         hr = S_OK;

HPEERENUM     hEnum;

ULONG            count = 0;

PEER_ENDPOINT_NEAR_ME **ppEndpoints = NULL;

ULONG i;

 

hr = PeerCollabEnumEndpointsNearMe(&hEnum);

if (SUCCEEDED(hr))

{

hr = PeerGetItemCount(hEnum, &count);

if (SUCCEEDED(hr) && count > 0)

{

hr = PeerGetNextItem(hEnum, &count, (void**) &ppEndpoints);

if (SUCCEEDED(hr))

{

for (i = 0; i < count; i++)

{

if (ppEndpoints[i]->pwzFriendlyName != NULL)

{

printf("Endpoint: %S\n", ppEndpoints[i]->pwzFriendlyName);

}

else

{

printf("Endpoint: (no friendly name)\n");

}

}

PeerFreeData(ppEndpoints);

}

 

}

else

{

printf("No endpoints");

}

PeerEndEnumeration(hEnum);

}

return hr;

}

 

int __cdecl main(int argc, __in_ecount(argc) char *argv[])

{

 

HRESULT hr = S_OK;

hr =  PeerCollabStartup(PEER_COLLAB_VERSION);

if (SUCCEEDED(hr))

{

hr = PeerCollabSignin(PEER_PRESENCE_NEAR_ME);

if (SUCCEEDED(hr))

{

hr=EnumeratePeopleNearMe();

}

(void)PeerCollabShutdown();

}

return 0;

}

 

Sorry for the repost, for some reason this didnt get published to the external site.