ホーム › System.PasswordManagement › MSChapSrvChangePassword2
MSChapSrvChangePassword2
関数暗号化されたパスワードを用いてMS-CHAPでパスワードを変更する。
シグネチャ
// ADVAPI32.dll
#include <windows.h>
DWORD MSChapSrvChangePassword2(
LPWSTR ServerName,
LPWSTR UserName,
SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldNt,
ENCRYPTED_LM_OWF_PASSWORD* OldNtOwfPasswordEncryptedWithNewNt,
BOOLEAN LmPresent,
SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldLm,
ENCRYPTED_LM_OWF_PASSWORD* OldLmOwfPasswordEncryptedWithNewLmOrNt
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| ServerName | LPWSTR | in |
| UserName | LPWSTR | in |
| NewPasswordEncryptedWithOldNt | SAMPR_ENCRYPTED_USER_PASSWORD* | in |
| OldNtOwfPasswordEncryptedWithNewNt | ENCRYPTED_LM_OWF_PASSWORD* | in |
| LmPresent | BOOLEAN | in |
| NewPasswordEncryptedWithOldLm | SAMPR_ENCRYPTED_USER_PASSWORD* | in |
| OldLmOwfPasswordEncryptedWithNewLmOrNt | ENCRYPTED_LM_OWF_PASSWORD* | in |
戻り値の型: DWORD
各言語での呼び出し定義
// ADVAPI32.dll
#include <windows.h>
DWORD MSChapSrvChangePassword2(
LPWSTR ServerName,
LPWSTR UserName,
SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldNt,
ENCRYPTED_LM_OWF_PASSWORD* OldNtOwfPasswordEncryptedWithNewNt,
BOOLEAN LmPresent,
SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldLm,
ENCRYPTED_LM_OWF_PASSWORD* OldLmOwfPasswordEncryptedWithNewLmOrNt
);[DllImport("ADVAPI32.dll", ExactSpelling = true)]
static extern uint MSChapSrvChangePassword2(
[MarshalAs(UnmanagedType.LPWStr)] string ServerName, // LPWSTR
[MarshalAs(UnmanagedType.LPWStr)] string UserName, // LPWSTR
IntPtr NewPasswordEncryptedWithOldNt, // SAMPR_ENCRYPTED_USER_PASSWORD*
IntPtr OldNtOwfPasswordEncryptedWithNewNt, // ENCRYPTED_LM_OWF_PASSWORD*
[MarshalAs(UnmanagedType.U1)] bool LmPresent, // BOOLEAN
IntPtr NewPasswordEncryptedWithOldLm, // SAMPR_ENCRYPTED_USER_PASSWORD*
IntPtr OldLmOwfPasswordEncryptedWithNewLmOrNt // ENCRYPTED_LM_OWF_PASSWORD*
);<DllImport("ADVAPI32.dll", ExactSpelling:=True)>
Public Shared Function MSChapSrvChangePassword2(
<MarshalAs(UnmanagedType.LPWStr)> ServerName As String, ' LPWSTR
<MarshalAs(UnmanagedType.LPWStr)> UserName As String, ' LPWSTR
NewPasswordEncryptedWithOldNt As IntPtr, ' SAMPR_ENCRYPTED_USER_PASSWORD*
OldNtOwfPasswordEncryptedWithNewNt As IntPtr, ' ENCRYPTED_LM_OWF_PASSWORD*
<MarshalAs(UnmanagedType.U1)> LmPresent As Boolean, ' BOOLEAN
NewPasswordEncryptedWithOldLm As IntPtr, ' SAMPR_ENCRYPTED_USER_PASSWORD*
OldLmOwfPasswordEncryptedWithNewLmOrNt As IntPtr ' ENCRYPTED_LM_OWF_PASSWORD*
) As UInteger
End Function' ServerName : LPWSTR
' UserName : LPWSTR
' NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD*
' OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD*
' LmPresent : BOOLEAN
' NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD*
' OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD*
Declare PtrSafe Function MSChapSrvChangePassword2 Lib "advapi32" ( _
ByVal ServerName As LongPtr, _
ByVal UserName As LongPtr, _
ByVal NewPasswordEncryptedWithOldNt As LongPtr, _
ByVal OldNtOwfPasswordEncryptedWithNewNt As LongPtr, _
ByVal LmPresent As Byte, _
ByVal NewPasswordEncryptedWithOldLm As LongPtr, _
ByVal OldLmOwfPasswordEncryptedWithNewLmOrNt As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
MSChapSrvChangePassword2 = ctypes.windll.advapi32.MSChapSrvChangePassword2
MSChapSrvChangePassword2.restype = wintypes.DWORD
MSChapSrvChangePassword2.argtypes = [
wintypes.LPCWSTR, # ServerName : LPWSTR
wintypes.LPCWSTR, # UserName : LPWSTR
ctypes.c_void_p, # NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD*
ctypes.c_void_p, # OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD*
ctypes.c_byte, # LmPresent : BOOLEAN
ctypes.c_void_p, # NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD*
ctypes.c_void_p, # OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD*
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('ADVAPI32.dll')
MSChapSrvChangePassword2 = Fiddle::Function.new(
lib['MSChapSrvChangePassword2'],
[
Fiddle::TYPE_VOIDP, # ServerName : LPWSTR
Fiddle::TYPE_VOIDP, # UserName : LPWSTR
Fiddle::TYPE_VOIDP, # NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD*
Fiddle::TYPE_VOIDP, # OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD*
Fiddle::TYPE_CHAR, # LmPresent : BOOLEAN
Fiddle::TYPE_VOIDP, # NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD*
Fiddle::TYPE_VOIDP, # OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD*
],
-Fiddle::TYPE_INT)#[link(name = "advapi32")]
extern "system" {
fn MSChapSrvChangePassword2(
ServerName: *mut u16, // LPWSTR
UserName: *mut u16, // LPWSTR
NewPasswordEncryptedWithOldNt: *mut SAMPR_ENCRYPTED_USER_PASSWORD, // SAMPR_ENCRYPTED_USER_PASSWORD*
OldNtOwfPasswordEncryptedWithNewNt: *mut ENCRYPTED_LM_OWF_PASSWORD, // ENCRYPTED_LM_OWF_PASSWORD*
LmPresent: u8, // BOOLEAN
NewPasswordEncryptedWithOldLm: *mut SAMPR_ENCRYPTED_USER_PASSWORD, // SAMPR_ENCRYPTED_USER_PASSWORD*
OldLmOwfPasswordEncryptedWithNewLmOrNt: *mut ENCRYPTED_LM_OWF_PASSWORD // ENCRYPTED_LM_OWF_PASSWORD*
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("ADVAPI32.dll")]
public static extern uint MSChapSrvChangePassword2([MarshalAs(UnmanagedType.LPWStr)] string ServerName, [MarshalAs(UnmanagedType.LPWStr)] string UserName, IntPtr NewPasswordEncryptedWithOldNt, IntPtr OldNtOwfPasswordEncryptedWithNewNt, [MarshalAs(UnmanagedType.U1)] bool LmPresent, IntPtr NewPasswordEncryptedWithOldLm, IntPtr OldLmOwfPasswordEncryptedWithNewLmOrNt);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_MSChapSrvChangePassword2' -Namespace Win32 -PassThru
# $api::MSChapSrvChangePassword2(ServerName, UserName, NewPasswordEncryptedWithOldNt, OldNtOwfPasswordEncryptedWithNewNt, LmPresent, NewPasswordEncryptedWithOldLm, OldLmOwfPasswordEncryptedWithNewLmOrNt)#uselib "ADVAPI32.dll"
#func global MSChapSrvChangePassword2 "MSChapSrvChangePassword2" sptr, sptr, sptr, sptr, sptr, sptr, sptr
; MSChapSrvChangePassword2 ServerName, UserName, varptr(NewPasswordEncryptedWithOldNt), varptr(OldNtOwfPasswordEncryptedWithNewNt), LmPresent, varptr(NewPasswordEncryptedWithOldLm), varptr(OldLmOwfPasswordEncryptedWithNewLmOrNt) ; 戻り値は stat
; ServerName : LPWSTR -> "sptr"
; UserName : LPWSTR -> "sptr"
; NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "sptr"
; OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "sptr"
; LmPresent : BOOLEAN -> "sptr"
; NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "sptr"
; OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "ADVAPI32.dll" #cfunc global MSChapSrvChangePassword2 "MSChapSrvChangePassword2" wstr, wstr, var, var, int, var, var ; res = MSChapSrvChangePassword2(ServerName, UserName, NewPasswordEncryptedWithOldNt, OldNtOwfPasswordEncryptedWithNewNt, LmPresent, NewPasswordEncryptedWithOldLm, OldLmOwfPasswordEncryptedWithNewLmOrNt) ; ServerName : LPWSTR -> "wstr" ; UserName : LPWSTR -> "wstr" ; NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "var" ; OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "var" ; LmPresent : BOOLEAN -> "int" ; NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "var" ; OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "ADVAPI32.dll" #cfunc global MSChapSrvChangePassword2 "MSChapSrvChangePassword2" wstr, wstr, sptr, sptr, int, sptr, sptr ; res = MSChapSrvChangePassword2(ServerName, UserName, varptr(NewPasswordEncryptedWithOldNt), varptr(OldNtOwfPasswordEncryptedWithNewNt), LmPresent, varptr(NewPasswordEncryptedWithOldLm), varptr(OldLmOwfPasswordEncryptedWithNewLmOrNt)) ; ServerName : LPWSTR -> "wstr" ; UserName : LPWSTR -> "wstr" ; NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "sptr" ; OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "sptr" ; LmPresent : BOOLEAN -> "int" ; NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "sptr" ; OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; DWORD MSChapSrvChangePassword2(LPWSTR ServerName, LPWSTR UserName, SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldNt, ENCRYPTED_LM_OWF_PASSWORD* OldNtOwfPasswordEncryptedWithNewNt, BOOLEAN LmPresent, SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldLm, ENCRYPTED_LM_OWF_PASSWORD* OldLmOwfPasswordEncryptedWithNewLmOrNt) #uselib "ADVAPI32.dll" #cfunc global MSChapSrvChangePassword2 "MSChapSrvChangePassword2" wstr, wstr, var, var, int, var, var ; res = MSChapSrvChangePassword2(ServerName, UserName, NewPasswordEncryptedWithOldNt, OldNtOwfPasswordEncryptedWithNewNt, LmPresent, NewPasswordEncryptedWithOldLm, OldLmOwfPasswordEncryptedWithNewLmOrNt) ; ServerName : LPWSTR -> "wstr" ; UserName : LPWSTR -> "wstr" ; NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "var" ; OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "var" ; LmPresent : BOOLEAN -> "int" ; NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "var" ; OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD MSChapSrvChangePassword2(LPWSTR ServerName, LPWSTR UserName, SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldNt, ENCRYPTED_LM_OWF_PASSWORD* OldNtOwfPasswordEncryptedWithNewNt, BOOLEAN LmPresent, SAMPR_ENCRYPTED_USER_PASSWORD* NewPasswordEncryptedWithOldLm, ENCRYPTED_LM_OWF_PASSWORD* OldLmOwfPasswordEncryptedWithNewLmOrNt) #uselib "ADVAPI32.dll" #cfunc global MSChapSrvChangePassword2 "MSChapSrvChangePassword2" wstr, wstr, intptr, intptr, int, intptr, intptr ; res = MSChapSrvChangePassword2(ServerName, UserName, varptr(NewPasswordEncryptedWithOldNt), varptr(OldNtOwfPasswordEncryptedWithNewNt), LmPresent, varptr(NewPasswordEncryptedWithOldLm), varptr(OldLmOwfPasswordEncryptedWithNewLmOrNt)) ; ServerName : LPWSTR -> "wstr" ; UserName : LPWSTR -> "wstr" ; NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "intptr" ; OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "intptr" ; LmPresent : BOOLEAN -> "int" ; NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "intptr" ; OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
procMSChapSrvChangePassword2 = advapi32.NewProc("MSChapSrvChangePassword2")
)
// ServerName (LPWSTR), UserName (LPWSTR), NewPasswordEncryptedWithOldNt (SAMPR_ENCRYPTED_USER_PASSWORD*), OldNtOwfPasswordEncryptedWithNewNt (ENCRYPTED_LM_OWF_PASSWORD*), LmPresent (BOOLEAN), NewPasswordEncryptedWithOldLm (SAMPR_ENCRYPTED_USER_PASSWORD*), OldLmOwfPasswordEncryptedWithNewLmOrNt (ENCRYPTED_LM_OWF_PASSWORD*)
r1, _, err := procMSChapSrvChangePassword2.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(ServerName))),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(UserName))),
uintptr(NewPasswordEncryptedWithOldNt),
uintptr(OldNtOwfPasswordEncryptedWithNewNt),
uintptr(LmPresent),
uintptr(NewPasswordEncryptedWithOldLm),
uintptr(OldLmOwfPasswordEncryptedWithNewLmOrNt),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction MSChapSrvChangePassword2(
ServerName: PWideChar; // LPWSTR
UserName: PWideChar; // LPWSTR
NewPasswordEncryptedWithOldNt: Pointer; // SAMPR_ENCRYPTED_USER_PASSWORD*
OldNtOwfPasswordEncryptedWithNewNt: Pointer; // ENCRYPTED_LM_OWF_PASSWORD*
LmPresent: ByteBool; // BOOLEAN
NewPasswordEncryptedWithOldLm: Pointer; // SAMPR_ENCRYPTED_USER_PASSWORD*
OldLmOwfPasswordEncryptedWithNewLmOrNt: Pointer // ENCRYPTED_LM_OWF_PASSWORD*
): DWORD; stdcall;
external 'ADVAPI32.dll' name 'MSChapSrvChangePassword2';result := DllCall("ADVAPI32\MSChapSrvChangePassword2"
, "WStr", ServerName ; LPWSTR
, "WStr", UserName ; LPWSTR
, "Ptr", NewPasswordEncryptedWithOldNt ; SAMPR_ENCRYPTED_USER_PASSWORD*
, "Ptr", OldNtOwfPasswordEncryptedWithNewNt ; ENCRYPTED_LM_OWF_PASSWORD*
, "Char", LmPresent ; BOOLEAN
, "Ptr", NewPasswordEncryptedWithOldLm ; SAMPR_ENCRYPTED_USER_PASSWORD*
, "Ptr", OldLmOwfPasswordEncryptedWithNewLmOrNt ; ENCRYPTED_LM_OWF_PASSWORD*
, "UInt") ; return: DWORD●MSChapSrvChangePassword2(ServerName, UserName, NewPasswordEncryptedWithOldNt, OldNtOwfPasswordEncryptedWithNewNt, LmPresent, NewPasswordEncryptedWithOldLm, OldLmOwfPasswordEncryptedWithNewLmOrNt) = DLL("ADVAPI32.dll", "dword MSChapSrvChangePassword2(char*, char*, void*, void*, byte, void*, void*)")
# 呼び出し: MSChapSrvChangePassword2(ServerName, UserName, NewPasswordEncryptedWithOldNt, OldNtOwfPasswordEncryptedWithNewNt, LmPresent, NewPasswordEncryptedWithOldLm, OldLmOwfPasswordEncryptedWithNewLmOrNt)
# ServerName : LPWSTR -> "char*"
# UserName : LPWSTR -> "char*"
# NewPasswordEncryptedWithOldNt : SAMPR_ENCRYPTED_USER_PASSWORD* -> "void*"
# OldNtOwfPasswordEncryptedWithNewNt : ENCRYPTED_LM_OWF_PASSWORD* -> "void*"
# LmPresent : BOOLEAN -> "byte"
# NewPasswordEncryptedWithOldLm : SAMPR_ENCRYPTED_USER_PASSWORD* -> "void*"
# OldLmOwfPasswordEncryptedWithNewLmOrNt : ENCRYPTED_LM_OWF_PASSWORD* -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。