problem mit WNetOpenEnum



  • hola leute

    folgendes prob:
    wollte mit eine auflistung aler rechner im netzwerk machen. aber ich bekomme bei der WNetOpenEnum funktion immer den fehler: 487 (ERROR_INVALID_ADDRESS).

    da zur zeit glaskugeln ziemlich rar sind, bisschen code:

    NETRESOURCE nr;
       HANDLE hEnum;
    
       nr.dwScope = RESOURCE_GLOBALNET;
       nr.dwType = RESOURCETYPE_ANY;
       nr.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN;
       nr.dwUsage = RESOURCEUSAGE_CONTAINER;
    
       DWORD error = WNetOpenEnum(
                     RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,&nr,&hEnum);
       if(error)
       {
          ShowMessage(error);
          return;
       }
       WNetCloseEnum(hEnum);
    

    das ist nur mal ne kleine testfunktion zum ausprobieren.
    ich hab aber irgendwie keinen plan was ich da falsch mache.
    kann mir da jemand weiterhelfen ?

    Meep Meep



  • Evtl. hilft es die Struktur vorher mit ZeroMemory o.ä. zu initialisieren (da du ja nicht alle Member füllst) 🙂



  • hoi flenders

    noe, nuetzt leider auch nix. bleibt unveraendert.
    sonst noch jemand ideen ?

    Meep Meep



  • Hallo Meep Meep

    Ich habe das selbe in VB gemacht (in C++ kommts nocht)
    Dort brauche ich allerdings NetServerEnum

    im der MSDN hat es einen Betrag dazu.

    #ifndef UNICODE
    #define UNICODE
    #endif
    
    #include <stdio.h>
    #include <assert.h>
    #include <windows.h> 
    #include <lm.h>
    
    int wmain(int argc, wchar_t *argv[])
    {
       LPSERVER_INFO_101 pBuf = NULL;
       LPSERVER_INFO_101 pTmpBuf;
       DWORD dwLevel = 101;
       DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
       DWORD dwEntriesRead = 0;
       DWORD dwTotalEntries = 0;
       DWORD dwTotalCount = 0;
       DWORD dwServerType = SV_TYPE_SERVER; // all servers
       DWORD dwResumeHandle = 0;
       NET_API_STATUS nStatus;
       LPTSTR pszServerName = NULL;
       DWORD i;
    
       if (argc > 2)
       {
          fwprintf(stderr, L"Usage: %s [\\\\ServerName]\n", argv[0]);
          exit(1);
       }
       // The server is not the default local computer.
       //
       if (argc == 2)
          pszServerName = argv[1];
       //
       // Call the NetServerEnum function to retrieve information
       //  for all servers, specifying information level 101.
       //
       nStatus = NetServerEnum(pszServerName,
                               dwLevel,
                               (LPBYTE *) &pBuf,
                               dwPrefMaxLen,
                               &dwEntriesRead,
                               &dwTotalEntries,
                               dwServerType,
                               NULL,
                               &dwResumeHandle);
       //
       // If the call succeeds,
       //
       if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
       {
          if ((pTmpBuf = pBuf) != NULL)
          {
             //
             // Loop through the entries and 
             //  print the data for all server types.
             //
             for (i = 0; i < dwEntriesRead; i++)
             {
                assert(pTmpBuf != NULL);
    
                if (pTmpBuf == NULL)
                {
                   fprintf(stderr, "An access violation has occurred\n");
                   break;
                }
    
                printf("\tPlatform: %d\n", pTmpBuf->sv101_platform_id);
                wprintf(L"\tName:     %s\n", pTmpBuf->sv101_name);
                printf("\tVersion:  %d.%d\n",
                       pTmpBuf->sv101_version_major,
                       pTmpBuf->sv101_version_minor);
                printf("\tType:     %d", pTmpBuf->sv101_type);
                //
                // Check to see if the server is a domain controller;
                //  if so, identify it as a PDC or a BDC.
                //
                if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)
                   wprintf(L" (PDC)");
                else if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
                   wprintf(L" (BDC)");
    
                printf("\n");
                //
                // Also print the comment associated with the server.
                //
                wprintf(L"\tComment:  %s\n\n", pTmpBuf->sv101_comment);
    
                pTmpBuf++;
                dwTotalCount++;
             }
             // Display a warning if all available entries were
             //  not enumerated, print the number actually 
             //  enumerated, and the total number available.
    
             if (nStatus == ERROR_MORE_DATA)
             {
                fprintf(stderr, "\nMore entries available!!!\n");
                fprintf(stderr, "Total entries: %d", dwTotalEntries);
             }
    
             printf("\nEntries enumerated: %d\n", dwTotalCount);
          }
       }
       else
          fprintf(stderr, "A system error has occurred: %d\n", nStatus);
       //
       // Free the allocated buffer.
       //
       if (pBuf != NULL)
          NetApiBufferFree(pBuf);
    
       return 0;
    }
    

    ich hoffe, das hilft dir weiter

    gruss roger


Anmelden zum Antworten