Win32 API 日本語リファレンス
ホームSecurity.Authentication.Identity › DOMAIN_PASSWORD_INFORMATION

DOMAIN_PASSWORD_INFORMATION

構造体
サイズx64: 24 バイト / x86: 24 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
MinPasswordLengthWORD2+0+0有効なパスワードの最小長を文字数で指定します。
PasswordHistoryLengthWORD2+2+2履歴リストに保存される過去のパスワードの数を示します。ユーザーは履歴リストにあるパスワードを再利用できません。
PasswordPropertiesDOMAIN_PASSWORD_PROPERTIES4+4+4

パスワードの特性を表すフラグです。次の値の 1 つ以上を指定できます。

意味
DOMAIN_PASSWORD_COMPLEX
0x00000001L
パスワードには、次の種類の文字のうち少なくとも 2 種類が混在していなければなりません。
  • 大文字
  • 小文字
  • 数字
DOMAIN_PASSWORD_NO_ANON_CHANGE
0x00000002L
ログオンせずにパスワードを変更することはできません。それ以外の場合は、パスワードの有効期限が切れていても、パスワードを変更してからログオンできます。
DOMAIN_PASSWORD_NO_CLEAR_CHANGE
0x00000004L
ドメインコントローラーが平文のパスワードを取得できないプロトコルの使用をクライアントに強制します。
DOMAIN_LOCKOUT_ADMINS
0x00000008L
組み込みの管理者アカウントがネットワークログオンからロックアウトされることを許可します。
DOMAIN_PASSWORD_STORE_CLEARTEXT
0x00000010L
ディレクトリサービスが、すべてのユーザーについてパスワードのハッシュ値ではなく平文のパスワードを保存します。
DOMAIN_REFUSE_PASSWORD_CHANGE
0x00000020L
コンピューターアカウントのパスワードを毎週自動的に変更するという要件を解除します。

この値はセキュリティを弱める可能性があるため、使用しないでください。

MaxPasswordAgeLONGLONG8+8+8

パスワードを変更せずに使用し続けられる最大の期間を指定します。これより古いパスワードは変更しなければなりません。SAM は相対時刻を負の値として、絶対時刻を正の値として格納するため、この時間は負の値を持つ FILETIME 構造体として格納されます。

MIDL_PASS が定義されている場合、このメンバーのデータ型は OLD_LARGE_INTEGER です。

MinPasswordAgeLONGLONG8+16+16

パスワードを変更できるようになるまでの最小の期間を指定します。SAM は相対時刻を負の値として、絶対時刻を正の値として格納するため、この時間は負の値を持つ FILETIME 構造体として格納されます。

MIDL_PASS が定義されている場合、このメンバーのデータ型は OLD_LARGE_INTEGER です。

公式ドキュメント

DOMAIN_PASSWORD_INFORMATION 構造体は、パスワードの最小長やパスワードがどの程度一意でなければならないかなど、ドメインのパスワードポリシーに関する情報を格納します。

この構造体は MSV1_0_CHANGEPASSWORD_RESPONSE 構造体で使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// DOMAIN_PASSWORD_INFORMATION  (x64 24 / x86 24 バイト)
typedef struct DOMAIN_PASSWORD_INFORMATION {
    WORD MinPasswordLength;
    WORD PasswordHistoryLength;
    DOMAIN_PASSWORD_PROPERTIES PasswordProperties;
    LONGLONG MaxPasswordAge;
    LONGLONG MinPasswordAge;
} DOMAIN_PASSWORD_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DOMAIN_PASSWORD_INFORMATION
{
    public ushort MinPasswordLength;
    public ushort PasswordHistoryLength;
    public uint PasswordProperties;
    public long MaxPasswordAge;
    public long MinPasswordAge;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DOMAIN_PASSWORD_INFORMATION
    Public MinPasswordLength As UShort
    Public PasswordHistoryLength As UShort
    Public PasswordProperties As UInteger
    Public MaxPasswordAge As Long
    Public MinPasswordAge As Long
End Structure
import ctypes
from ctypes import wintypes

class DOMAIN_PASSWORD_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("MinPasswordLength", ctypes.c_ushort),
        ("PasswordHistoryLength", ctypes.c_ushort),
        ("PasswordProperties", wintypes.DWORD),
        ("MaxPasswordAge", ctypes.c_longlong),
        ("MinPasswordAge", ctypes.c_longlong),
    ]
#[repr(C)]
pub struct DOMAIN_PASSWORD_INFORMATION {
    pub MinPasswordLength: u16,
    pub PasswordHistoryLength: u16,
    pub PasswordProperties: u32,
    pub MaxPasswordAge: i64,
    pub MinPasswordAge: i64,
}
import "golang.org/x/sys/windows"

type DOMAIN_PASSWORD_INFORMATION struct {
	MinPasswordLength uint16
	PasswordHistoryLength uint16
	PasswordProperties uint32
	MaxPasswordAge int64
	MinPasswordAge int64
}
type
  DOMAIN_PASSWORD_INFORMATION = record
    MinPasswordLength: Word;
    PasswordHistoryLength: Word;
    PasswordProperties: DWORD;
    MaxPasswordAge: Int64;
    MinPasswordAge: Int64;
  end;
const DOMAIN_PASSWORD_INFORMATION = extern struct {
    MinPasswordLength: u16,
    PasswordHistoryLength: u16,
    PasswordProperties: u32,
    MaxPasswordAge: i64,
    MinPasswordAge: i64,
};
type
  DOMAIN_PASSWORD_INFORMATION {.bycopy.} = object
    MinPasswordLength: uint16
    PasswordHistoryLength: uint16
    PasswordProperties: uint32
    MaxPasswordAge: int64
    MinPasswordAge: int64
struct DOMAIN_PASSWORD_INFORMATION
{
    ushort MinPasswordLength;
    ushort PasswordHistoryLength;
    uint PasswordProperties;
    long MaxPasswordAge;
    long MinPasswordAge;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DOMAIN_PASSWORD_INFORMATION サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; MinPasswordLength : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; PasswordHistoryLength : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; PasswordProperties : DOMAIN_PASSWORD_PROPERTIES (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; MaxPasswordAge : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; MinPasswordAge : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DOMAIN_PASSWORD_INFORMATION
    #field short MinPasswordLength
    #field short PasswordHistoryLength
    #field int PasswordProperties
    #field int64 MaxPasswordAge
    #field int64 MinPasswordAge
#endstruct

stdim st, DOMAIN_PASSWORD_INFORMATION        ; NSTRUCT 変数を確保
st->MinPasswordLength = 100
mes "MinPasswordLength=" + st->MinPasswordLength