Share via


NetUserModalsGet 関数 (lmaccess.h)

NetUserModalsGet 関数は、セキュリティ データベース (セキュリティ アカウント マネージャー (SAM) データベース、またはドメイン コントローラーの場合は Active Directory) 内のすべてのユーザーとグローバル グループのグローバル情報を取得します。

構文

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

パラメーター

[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構造体を指します。
 

null セッション ログオンでは、情報レベル 0 と 3 で NetUserModalsGet を匿名で呼び出すことができます。

[out] bufptr

データを受信するバッファーへのポインター。 このデータの形式は、 level パラメーターの値によって異なります。

このデータのバッファーはシステムによって割り当てられ、アプリケーションは NetApiBufferFree 関数を呼び出して、返されるデータが不要になったときに割り当てられたメモリを解放する必要があります。 詳細については、「 ネットワーク管理機能バッファー 」および「 ネットワーク管理機能バッファーの長さ」を参照してください。

戻り値

関数が成功した場合、戻り値はNERR_Success。

関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。

リターン コード 説明
ERROR_ACCESS_DENIED
ユーザーには、要求された情報へのアクセス権がありません。
ERROR_BAD_NETPATH
ネットワーク パスが見つかりませんでした。 このエラーは、 servername パラメーターが見つからなかった場合に返されます。
ERROR_INVALID_LEVEL
システム コール レベルが正しくありません。 level パラメーターがサポートされている値の 1 つでない場合、このエラーが返されます。
ERROR_INVALID_NAME
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。 このエラーは、 servername パラメーターの構文が正しくない場合に返されます。
ERROR_WRONG_TARGET_NAME
ターゲット アカウント名が間違っています。 このエラーは、Windows Vista で実行されているリモート サーバー名 パラメーターへのログオンエラーに対して返されます。
NERR_InvalidComputer
コンピューター名が無効です。

解説

Active Directory のプログラミングを行う場合は、特定の Active Directory サービス インターフェイス (ADSI) メソッドを呼び出して、ネットワーク管理ユーザー モーダル関数を呼び出すことで実現できるのと同じ機能を実現できる場合があります。 詳細については、「 IADsDomain」を参照してください。

Active Directory を実行しているドメイン コントローラーでこの関数を呼び出すと、 セキュリティ保護可能なオブジェクトのアクセス制御リスト (ACL) に基づいてアクセスが許可または拒否されます。 既定の ACL では、"Pre-Windows 2000 互換アクセス" グループのすべての認証済みユーザーとメンバーに情報の表示が許可されます。 メンバー サーバーまたはワークステーションでこの関数を呼び出すと、すべての認証済みユーザーが情報を表示できます。 これらのプラットフォームでの匿名アクセスと匿名アクセスの制限については、「 ネットワーク管理機能のセキュリティ要件」を参照してください。 ACL、ACE、およびアクセス トークンの詳細については、「存取控制 モデル」を参照してください。

Domain オブジェクトのセキュリティ記述子は、この関数のアクセスチェックを実行するために使用されます。

コンピューターが属するドメインのセキュリティ識別子 (SID) を取得するには、servername パラメーターでUSER_MODALS_INFO_2構造体と NULL を指定する NetUserModalsGet 関数を呼び出します。 コンピューターがドメインのメンバーでない場合、関数は NULL ポインターを返します。

次のコード サンプルは、 NetUserModalsGet 関数を呼び出して、すべてのユーザーとグローバル グループのグローバル情報を取得する方法を示しています。 このサンプルでは、情報レベル 0 (USER_MODALS_INFO_0) を指定して NetUserModalsGet を呼び出します。 呼び出しが成功した場合、サンプルはグローバル パスワード情報を出力します。 最後に、コード サンプルでは、情報バッファーに割り当てられたメモリを解放します。

#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 (include 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

ユーザー モーダル関数