zoukankan      html  css  js  c++  java
  • C++之NetUserEnum

    #ifndef UNICODE
    #define UNICODE
    #endif
    #pragma comment(lib, "netapi32.lib")
    
    #include <stdio.h>
    #include <assert.h>
    #include <windows.h> 
    #include <lm.h>
    
    int wmain(int argc, wchar_t* argv[])
    {
        LPUSER_INFO_0 pBuf = NULL;
        LPUSER_INFO_0 pTmpBuf;
        DWORD dwLevel = 0;
        DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
        DWORD dwEntriesRead = 0;
        DWORD dwTotalEntries = 0;
        DWORD dwResumeHandle = 0;
        DWORD i;
        DWORD dwTotalCount = 0;
        NET_API_STATUS nStatus;
        LPTSTR pszServerName = NULL;
    
        if (argc > 2)
        {
            fwprintf(stderr, L"Usage: %s [\\ServerName]
    ", argv[0]);
            exit(1);
        }
        // The server is not the default local computer.
        //
        if (argc == 2)
            pszServerName = (LPTSTR)argv[1];
        wprintf(L"
    User account on %s: 
    ", pszServerName);
        //
        // Call the NetUserEnum function, specifying level 0; 
        //   enumerate global user account types only.
        //
        do // begin do
        {
            nStatus = NetUserEnum((LPCWSTR)pszServerName,
                dwLevel,
                FILTER_NORMAL_ACCOUNT, // global users
                (LPBYTE*)&pBuf,
                dwPrefMaxLen,
                &dwEntriesRead,
                &dwTotalEntries,
                &dwResumeHandle);
            //
            // If the call succeeds,
            //
            if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
            {
                if ((pTmpBuf = pBuf) != NULL)
                {
                    //
                    // Loop through the entries.
                    //
                    for (i = 0; (i < dwEntriesRead); i++)
                    {
                        assert(pTmpBuf != NULL);
    
                        if (pTmpBuf == NULL)
                        {
                            fprintf(stderr, "An access violation has occurred
    ");
                            break;
                        }
                        //
                        //  Print the name of the user account.
                        //
                        wprintf(L"	-- %s
    ", pTmpBuf->usri0_name);
    
                        pTmpBuf++;
                        dwTotalCount++;
                    }
                }
            }
            //
            // Otherwise, print the system error.
            //
            else
                fprintf(stderr, "A system error has occurred: %d
    ", nStatus);
            //
            // Free the allocated buffer.
            //
            if (pBuf != NULL)
            {
                NetApiBufferFree(pBuf);
                pBuf = NULL;
            }
        }
        // Continue to call NetUserEnum while 
        //  there are more entries. 
        // 
        while (nStatus == ERROR_MORE_DATA); // end do
        //
        // Check again for allocated memory.
        //
        if (pBuf != NULL)
            NetApiBufferFree(pBuf);
        //
        // Print the final count of users enumerated.
        //
        fprintf(stderr, "
    Total of %d entries enumerated
    ", dwTotalCount);
    
        return 0;
    }
    
    

    联系邮箱:yang_s1r@163.com 博客园地址:https://www.cnblogs.com/Yang34/
  • 相关阅读:
    堆排序
    快速排序
    hpp头文件与h头文件的区别
    c++_ url
    C++11:POD数据类型
    Android 触摸手势基础 官方文档概览2
    札记:android手势识别,MotionEvent
    强迫自己学习(心态篇),国庆,你准备去哪疯?
    深入理解计算机系统(2.5)---二进制整数的加、减法运算(重要)
    深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
  • 原文地址:https://www.cnblogs.com/Yang34/p/14242026.html
Copyright © 2011-2022 走看看