ホーム › Security.Authentication.Identity › MSV1_0_CHANGEPASSWORD_RESPONSE
MSV1_0_CHANGEPASSWORD_RESPONSE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| MessageType | MSV1_0_PROTOCOL_MESSAGE_TYPE | 4 | +0 | +0 | プロトコルメッセージ種別を示す列挙値。 |
| PasswordInfoValid | BOOLEAN | 1 | +4 | +4 | DomainPasswordInfoが有効か否かを示す真偽値。 |
| DomainPasswordInfo | DOMAIN_PASSWORD_INFORMATION | 24 | +8 | +8 | ドメインのパスワードポリシー情報。 |
各言語での定義
#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;
// MSV1_0_CHANGEPASSWORD_RESPONSE (x64 32 / x86 32 バイト)
typedef struct MSV1_0_CHANGEPASSWORD_RESPONSE {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
BOOLEAN PasswordInfoValid;
DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
} MSV1_0_CHANGEPASSWORD_RESPONSE;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;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MSV1_0_CHANGEPASSWORD_RESPONSE
{
public int MessageType;
[MarshalAs(UnmanagedType.U1)] public bool PasswordInfoValid;
public DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
}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
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MSV1_0_CHANGEPASSWORD_RESPONSE
Public MessageType As Integer
<MarshalAs(UnmanagedType.U1)> Public PasswordInfoValid As Boolean
Public DomainPasswordInfo As DOMAIN_PASSWORD_INFORMATION
End Structureimport 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),
]
class MSV1_0_CHANGEPASSWORD_RESPONSE(ctypes.Structure):
_fields_ = [
("MessageType", ctypes.c_int),
("PasswordInfoValid", ctypes.c_byte),
("DomainPasswordInfo", DOMAIN_PASSWORD_INFORMATION),
]#[repr(C)]
pub struct DOMAIN_PASSWORD_INFORMATION {
pub MinPasswordLength: u16,
pub PasswordHistoryLength: u16,
pub PasswordProperties: u32,
pub MaxPasswordAge: i64,
pub MinPasswordAge: i64,
}
#[repr(C)]
pub struct MSV1_0_CHANGEPASSWORD_RESPONSE {
pub MessageType: i32,
pub PasswordInfoValid: u8,
pub DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION,
}import "golang.org/x/sys/windows"
type DOMAIN_PASSWORD_INFORMATION struct {
MinPasswordLength uint16
PasswordHistoryLength uint16
PasswordProperties uint32
MaxPasswordAge int64
MinPasswordAge int64
}
type MSV1_0_CHANGEPASSWORD_RESPONSE struct {
MessageType int32
PasswordInfoValid byte
DomainPasswordInfo DOMAIN_PASSWORD_INFORMATION
}type
DOMAIN_PASSWORD_INFORMATION = record
MinPasswordLength: Word;
PasswordHistoryLength: Word;
PasswordProperties: DWORD;
MaxPasswordAge: Int64;
MinPasswordAge: Int64;
end;
MSV1_0_CHANGEPASSWORD_RESPONSE = record
MessageType: Integer;
PasswordInfoValid: ByteBool;
DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION;
end;const DOMAIN_PASSWORD_INFORMATION = extern struct {
MinPasswordLength: u16,
PasswordHistoryLength: u16,
PasswordProperties: u32,
MaxPasswordAge: i64,
MinPasswordAge: i64,
};
const MSV1_0_CHANGEPASSWORD_RESPONSE = extern struct {
MessageType: i32,
PasswordInfoValid: u8,
DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION,
};type
DOMAIN_PASSWORD_INFORMATION {.bycopy.} = object
MinPasswordLength: uint16
PasswordHistoryLength: uint16
PasswordProperties: uint32
MaxPasswordAge: int64
MinPasswordAge: int64
MSV1_0_CHANGEPASSWORD_RESPONSE {.bycopy.} = object
MessageType: int32
PasswordInfoValid: uint8
DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATIONstruct DOMAIN_PASSWORD_INFORMATION
{
ushort MinPasswordLength;
ushort PasswordHistoryLength;
uint PasswordProperties;
long MaxPasswordAge;
long MinPasswordAge;
}
struct MSV1_0_CHANGEPASSWORD_RESPONSE
{
int MessageType;
ubyte PasswordInfoValid;
DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MSV1_0_CHANGEPASSWORD_RESPONSE サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; MessageType : MSV1_0_PROTOCOL_MESSAGE_TYPE (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PasswordInfoValid : BOOLEAN (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; DomainPasswordInfo : DOMAIN_PASSWORD_INFORMATION (+8, 24byte) varptr(st)+8 を基点に操作(24byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DOMAIN_PASSWORD_INFORMATION
#field short MinPasswordLength
#field short PasswordHistoryLength
#field int PasswordProperties
#field int64 MaxPasswordAge
#field int64 MinPasswordAge
#endstruct
#defstruct global MSV1_0_CHANGEPASSWORD_RESPONSE
#field int MessageType
#field bool1 PasswordInfoValid
#field DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo
#endstruct
stdim st, MSV1_0_CHANGEPASSWORD_RESPONSE ; NSTRUCT 変数を確保
st->MessageType = 100
mes "MessageType=" + st->MessageType