NetUserModalsGet 函数 (lmaccess.h)

NetUserModalsGet 函数检索安全数据库中所有用户和全局组的全局信息,该数据库是安全帐户管理器 () SAM) 数据库,如果是域控制器,则为 Active Directory。

语法

NET_API_STATUS NET_API_FUNCTION NetUserModalsGet(
  [in, optional] LPCWSTR servername,
  [in]           DWORD   level,
  [out]          LPBYTE  *bufptr
);

parameters

[in, optional] servername

指向常量字符串的指针,该字符串指定要对其执行函数的远程服务器的 DNS 或 NetBIOS 名称。 如果此参数为 NULL,则使用本地计算机。 有关更多信息,请参见下面的“备注”部分。

[in] level

请求的数据的信息级别。 此参数的取值可为下列值之一:

含义
0
返回全局密码参数。 bufptr 参数指向USER_MODALS_INFO_0结构。
1
返回登录服务器和域控制器信息。 bufptr 参数指向USER_MODALS_INFO_1结构。
2
返回域名和标识符。 bufptr 参数指向USER_MODALS_INFO_2结构。 有关更多信息,请参见下面的“备注”部分。
3
返回锁定信息。 bufptr 参数指向USER_MODALS_INFO_3结构。
 

空会话登录可以在信息级别 0 和 3 上匿名调用 NetUserModalsGet

[out] bufptr

指向接收数据的缓冲区的指针。 此数据的格式取决于 级别 参数的值。

此数据的缓冲区由系统分配,应用程序必须调用 NetApiBufferFree 函数,以便在不再需要返回的数据时释放分配的内存。 有关详细信息,请参阅 网络管理功能缓冲区网络管理功能缓冲区长度

返回值

如果函数成功,则返回值NERR_Success。

如果函数失败,则返回值可能是以下错误代码之一。

返回代码 说明
ERROR_ACCESS_DENIED
用户无权访问请求的信息。
ERROR_BAD_NETPATH
找不到网络路径。 如果找不到 servername 参数,则返回此错误。
ERROR_INVALID_LEVEL
系统调用级别不正确。 如果 级别 参数不是受支持的值之一,则返回此错误。
ERROR_INVALID_NAME
文件名、目录名称或卷标签语法不正确。 如果 servername 参数语法不正确,则返回此错误。
ERROR_WRONG_TARGET_NAME
目标帐户名不正确。 如果登录在 Windows Vista 上运行的远程 servername 参数失败,则会返回此错误。
NERR_InvalidComputer
计算机名称无效。

注解

如果要对 Active Directory 进行编程,则可以调用某些 Active Directory 服务接口 (ADSI) 方法,以实现通过调用网络管理用户模式函数可以实现的相同功能。 有关详细信息,请参阅 IADsDomain

如果在运行 Active Directory 的域控制器上调用此函数,则会根据 安全对象的访问控制列表 (ACL) 来允许或拒绝访问。 默认 ACL 允许所有经过身份验证的用户和“Windows 2000 前兼容访问”组的成员查看信息。 如果在成员服务器或工作站上调用此函数,则所有经过身份验证的用户都可以查看信息。 有关这些平台上的匿名访问和限制匿名访问的信息,请参阅 网络管理功能的安全要求。 有关 ACL、ACE 和访问令牌的详细信息,请参阅访问控制模型

Domain 对象的安全描述符用于执行此函数的访问检查。

若要检索计算机所属域 (SID) 的安全标识符,请调用 NetUserModalsGet 函数,并在 servername 参数中指定USER_MODALS_INFO_2结构和 NULL。 如果计算机不是域的成员,则该函数将返回 NULL 指针。

示例

以下代码示例演示如何通过调用 NetUserModalsGet 函数检索所有用户和全局组的全局信息。 此示例调用 NetUserModalsGet,将信息级别指定为 0 (USER_MODALS_INFO_0) 。 如果调用成功,示例将输出全局密码信息。 最后,代码示例释放为信息缓冲区分配的内存。

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <stdio.h>
#include <windows.h> 
#include <lm.h>

int wmain(int argc, wchar_t *argv[])
{
   DWORD dwLevel = 0;
   USER_MODALS_INFO_0 *pBuf = NULL;
   NET_API_STATUS nStatus;
   LPTSTR pszServerName = NULL;

   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 = (LPTSTR) argv[1];
   //
   // Call the NetUserModalsGet function; specify level 0.
   //
   nStatus = NetUserModalsGet((LPCWSTR) pszServerName,
                              dwLevel,
                              (LPBYTE *)&pBuf);
   //
   // If the call succeeds, print the global information.
   //
   if (nStatus == NERR_Success)
   {
      if (pBuf != NULL)
      {
         printf("\tMinimum password length:  %d\n", pBuf->usrmod0_min_passwd_len);
         printf("\tMaximum password age (d): %d\n", pBuf->usrmod0_max_passwd_age/86400);
         printf("\tMinimum password age (d): %d\n", pBuf->usrmod0_min_passwd_age/86400);
         printf("\tForced log off time (s):  %d\n", pBuf->usrmod0_force_logoff);
         printf("\tPassword history length:  %d\n", pBuf->usrmod0_password_hist_len);
      }
   }
   // Otherwise, print the system error.
   //
   else
      fprintf(stderr, "A system error has occurred: %d\n", nStatus);
   //
   // Free the allocated memory.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);

   return 0;
}

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 lmaccess.h (包括 Lm.h)
Library Netapi32.lib
DLL Netapi32.dll

另请参阅

NetUserModalsSet

网络管理功能

网络管理概述

USER_MODALS_INFO_0

USER_MODALS_INFO_1

USER_MODALS_INFO_2

USER_MODALS_INFO_3

用户模式函数