Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- #include <stdio.h>
- #include <iptypes.h>
- #include <iphlpapi.h>
- using namespace std;
- #define ADAPTER_COUNT 3
- void DisplayAdapterInfoStruct(int i, IP_ADAPTER_INFO ipAdptrInfo){
- printf("ADAPTER[%d]\n", i);
- cout << "\t" << "Adapter info: " << ipAdptrInfo.Description << endl;
- ULONG j = ipAdptrInfo.AddressLength;
- printf("\tMac address: ");
- for (ULONG k = 0; k < j; k++){
- printf("%02X", ipAdptrInfo.Address[k]);
- k == j - 1 ? printf("\n") : printf("-");
- }
- }
- void GetAdaptersInfo(){
- PIP_ADAPTER_INFO pAdapterInfo = NULL;
- pAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO) * ADAPTER_COUNT);
- ULONG ulBufLen = sizeof(IP_ADAPTER_INFO) * ADAPTER_COUNT;
- ULONG errCode;
- errCode = GetAdaptersInfo(pAdapterInfo, &ulBufLen);
- switch (errCode){
- case ERROR_BUFFER_OVERFLOW:
- cout << "Buffer overflow." << endl;
- break;
- case ERROR_SUCCESS:
- cout << "Retrieved adapters info successfully." << endl;
- break;
- case ERROR_INVALID_DATA:
- cout << "Invalid adapter information was retrieved." << endl;
- break;
- case ERROR_INVALID_PARAMETER:
- cout << "Invalid parameter provided." << endl;
- break;
- case ERROR_NO_DATA:
- cout << "No adapter information exists for the local computer." << endl;
- break;
- case ERROR_NOT_SUPPORTED:
- cout << "The GetAdaptersInfo function is not supported by the operating system running on the local computer." << endl;
- break;
- }
- if (errCode == ERROR_SUCCESS){
- PIP_ADAPTER_INFO pAdapterInfoCurr = pAdapterInfo;
- int i = 1;
- while (pAdapterInfoCurr){
- DisplayAdapterInfoStruct(i++, *pAdapterInfoCurr);
- pAdapterInfoCurr = pAdapterInfoCurr->Next;
- }
- }
- free(pAdapterInfo);
- }
- void DisplayNetResourceStruct(int i, LPNETRESOURCE lpnrLocal)
- {
- printf("NETRESOURCE[%d] Scope: ", i);
- switch (lpnrLocal->dwScope) {
- case (RESOURCE_CONNECTED):
- printf("connected\n");
- break;
- case (RESOURCE_GLOBALNET):
- printf("all resources\n");
- break;
- case (RESOURCE_REMEMBERED):
- printf("remembered\n");
- break;
- default:
- printf("unknown scope %d\n", lpnrLocal->dwScope);
- break;
- }
- printf("NETRESOURCE[%d] Type: ", i);
- switch (lpnrLocal->dwType) {
- case (RESOURCETYPE_ANY):
- printf("any\n");
- break;
- case (RESOURCETYPE_DISK):
- printf("disk\n");
- break;
- case (RESOURCETYPE_PRINT):
- printf("print\n");
- break;
- default:
- printf("unknown type %d\n", lpnrLocal->dwType);
- break;
- }
- printf("NETRESOURCE[%d] DisplayType: ", i);
- switch (lpnrLocal->dwDisplayType) {
- case (RESOURCEDISPLAYTYPE_GENERIC):
- printf("generic\n");
- break;
- case (RESOURCEDISPLAYTYPE_DOMAIN):
- printf("domain\n");
- break;
- case (RESOURCEDISPLAYTYPE_SERVER):
- printf("server\n");
- break;
- case (RESOURCEDISPLAYTYPE_SHARE):
- printf("share\n");
- break;
- case (RESOURCEDISPLAYTYPE_FILE):
- printf("file\n");
- break;
- case (RESOURCEDISPLAYTYPE_GROUP):
- printf("group\n");
- break;
- case (RESOURCEDISPLAYTYPE_NETWORK):
- printf("network\n");
- break;
- default:
- printf("unknown display type %d\n", lpnrLocal->dwDisplayType);
- break;
- }
- printf("NETRESOURCE[%d] Usage: 0x%x = ", i, lpnrLocal->dwUsage);
- if (lpnrLocal->dwUsage & RESOURCEUSAGE_CONNECTABLE)
- printf("connectable ");
- if (lpnrLocal->dwUsage & RESOURCEUSAGE_CONTAINER)
- printf("container ");
- printf("\n");
- printf("NETRESOURCE[%d] Localname: %S\n", i, lpnrLocal->lpLocalName);
- printf("NETRESOURCE[%d] Remotename: %S\n", i, lpnrLocal->lpRemoteName);
- printf("NETRESOURCE[%d] Comment: %S\n", i, lpnrLocal->lpComment);
- printf("NETRESOURCE[%d] Provider: %S\n", i, lpnrLocal->lpProvider);
- printf("\n");
- }
- BOOL EnumerateLocalResources(LPNETRESOURCE lpnr){
- HANDLE hEnum;
- DWORD errCode;
- errCode = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &hEnum);
- if (errCode != NO_ERROR) {
- printf("WnetOpenEnum failed with error %d\n", errCode);
- return FALSE;
- }
- DWORD cbBuffer = 16384;
- LPNETRESOURCE lpnrLocal = (LPNETRESOURCE)malloc(cbBuffer);
- DWORD dwResultEnum;
- DWORD cEntries = -1;
- DWORD i;
- do {
- ZeroMemory(lpnrLocal, cbBuffer);
- dwResultEnum = WNetEnumResource(hEnum, &cEntries, lpnrLocal, &cbBuffer);
- if (dwResultEnum == NO_ERROR) {
- for (i = 0; i < cEntries; i++) {
- DisplayNetResourceStruct(i, &lpnrLocal[i]);
- if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER))
- if (!EnumerateLocalResources(&lpnrLocal[i]))
- printf("EnumerateLocalResources returned FALSE\n");
- }
- }
- else if (dwResultEnum != ERROR_NO_MORE_ITEMS) {
- printf("WNetEnumResource failed with error %d\n", dwResultEnum);
- break;
- }
- }
- while (dwResultEnum != ERROR_NO_MORE_ITEMS);
- free(lpnrLocal);
- errCode = WNetCloseEnum(hEnum);
- if (errCode != NO_ERROR) {
- printf("WNetCloseEnum failed with error %d\n", errCode);
- return FALSE;
- }
- cout << "Retrieved network resource info successfully." << endl;
- return TRUE;
- }
- int main()
- {
- GetAdaptersInfo();
- cout << "" << endl;
- LPNETRESOURCE lpnr = NULL;
- EnumerateLocalResources(lpnr);
- printf("done");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement