none
求助,使用 NetGroupEnum 枚举本机的用户组时出现访问冲突异常 RRS feed

  • 问题

  • 我打算使用 Platform SDK 中的 NetGroupEnum 方法来枚举本机用户组信息, 代码如下:(绝大部分仿照自 MSDN 中 NetUserEnum 方法的例子,运行环境为:Windows XP, Visual studio 2005)

    int _tmain(int argc, _TCHAR* argv[])
    {
     LPGROUP_INFO_0 pBuf = NULL;
     DWORD dwLevel = 0;
     DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
     DWORD dwEntriesRead = 0;
     DWORD dwTotalEntries = 0;
     DWORD dwResumeHandle = 0;
     DWORD dwTotalCount = 0;
     LPTSTR pszServerName = NULL;
     
     NET_API_STATUS nStatus = NetGroupEnum(pszServerName,
      dwLevel,
      (LPBYTE*)pBuf,
      dwPrefMaxLen,
      &dwEntriesRead,
      &dwTotalEntries,
      &dwResumeHandle);

     getchar();

     return 0;
    }

    结果在执行 NetGroupEnum 方法的时候初现了如下异常: Test.exe 中的 0x5b892f4c 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突

    由于看上去好像 NetGroupEnum 直接就在 pBuf 的指针后面写入内容,所以我改了一下代码,为 pBuf 分配内存,部分代码如下:

     LPGROUP_INFO_0 pBuf = NULL;
     
     改为
     
     LPGROUP_INFO_0 pBuf = new GROUP_INFO_0[100]; // 当然没有 100 个,尝试而已
     ZeroMemory(pBuf, (sizeof(GROUP_INFO_0) * 100));
     
    再次运行,可以顺利通过,并且 NET_API_STATUS nStatus == NERR_Success, 但 dwEntriesRead == 1(实际并不止一个用户组)。然后我输出器 LPGROUP_INFO_0->grpi0_name 的值,显示如下:

    ????????????????????????????????????????????
    ????????????????????????????????????????????
    ......
    (一堆问号)
    ......
    ??????????????None(最后是一个 None 的单词)

    目前一头雾水中....

    恳请哪位有此方面经验的高人,告知我是哪里搞错了,或者是否有其他办法可以枚举用户组信息。万分感激。

    • 已编辑 IGabriel 2009年8月17日 3:25
    2009年8月17日 3:15

答案

全部回复