ホーム › Security.Authentication.Identity › SECPKG_SUPPLIED_CREDENTIAL
SECPKG_SUPPLIED_CREDENTIAL
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbHeaderLength | WORD | 2 | +0 | +0 | 構造体ヘッダー部の長さ(バイト数)。 |
| cbStructureLength | WORD | 2 | +2 | +2 | 構造体全体の長さ(バイト数)。 |
| UserName | SECPKG_SHORT_VECTOR | 8 | +4 | +4 | ユーザー名データの位置と長さを示すSECPKG_SHORT_VECTOR。 |
| DomainName | SECPKG_SHORT_VECTOR | 8 | +12 | +12 | ドメイン名データの位置と長さを示すSECPKG_SHORT_VECTOR。 |
| PackedCredentials | SECPKG_BYTE_VECTOR | 8 | +20 | +20 | パック済み資格情報データの位置と長さを示すSECPKG_BYTE_VECTOR。 |
| CredFlags | DWORD | 4 | +28 | +28 | 資格情報の特性を示すビットフラグ。 |
各言語での定義
#include <windows.h>
// SECPKG_SHORT_VECTOR (x64 8 / x86 8 バイト)
typedef struct SECPKG_SHORT_VECTOR {
DWORD ShortArrayOffset;
WORD ShortArrayCount;
} SECPKG_SHORT_VECTOR;
// SECPKG_BYTE_VECTOR (x64 8 / x86 8 バイト)
typedef struct SECPKG_BYTE_VECTOR {
DWORD ByteArrayOffset;
WORD ByteArrayLength;
} SECPKG_BYTE_VECTOR;
// SECPKG_SUPPLIED_CREDENTIAL (x64 32 / x86 32 バイト)
typedef struct SECPKG_SUPPLIED_CREDENTIAL {
WORD cbHeaderLength;
WORD cbStructureLength;
SECPKG_SHORT_VECTOR UserName;
SECPKG_SHORT_VECTOR DomainName;
SECPKG_BYTE_VECTOR PackedCredentials;
DWORD CredFlags;
} SECPKG_SUPPLIED_CREDENTIAL;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SECPKG_SHORT_VECTOR
{
public uint ShortArrayOffset;
public ushort ShortArrayCount;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SECPKG_BYTE_VECTOR
{
public uint ByteArrayOffset;
public ushort ByteArrayLength;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SECPKG_SUPPLIED_CREDENTIAL
{
public ushort cbHeaderLength;
public ushort cbStructureLength;
public SECPKG_SHORT_VECTOR UserName;
public SECPKG_SHORT_VECTOR DomainName;
public SECPKG_BYTE_VECTOR PackedCredentials;
public uint CredFlags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SECPKG_SHORT_VECTOR
Public ShortArrayOffset As UInteger
Public ShortArrayCount As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SECPKG_BYTE_VECTOR
Public ByteArrayOffset As UInteger
Public ByteArrayLength As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SECPKG_SUPPLIED_CREDENTIAL
Public cbHeaderLength As UShort
Public cbStructureLength As UShort
Public UserName As SECPKG_SHORT_VECTOR
Public DomainName As SECPKG_SHORT_VECTOR
Public PackedCredentials As SECPKG_BYTE_VECTOR
Public CredFlags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class SECPKG_SHORT_VECTOR(ctypes.Structure):
_fields_ = [
("ShortArrayOffset", wintypes.DWORD),
("ShortArrayCount", ctypes.c_ushort),
]
class SECPKG_BYTE_VECTOR(ctypes.Structure):
_fields_ = [
("ByteArrayOffset", wintypes.DWORD),
("ByteArrayLength", ctypes.c_ushort),
]
class SECPKG_SUPPLIED_CREDENTIAL(ctypes.Structure):
_fields_ = [
("cbHeaderLength", ctypes.c_ushort),
("cbStructureLength", ctypes.c_ushort),
("UserName", SECPKG_SHORT_VECTOR),
("DomainName", SECPKG_SHORT_VECTOR),
("PackedCredentials", SECPKG_BYTE_VECTOR),
("CredFlags", wintypes.DWORD),
]#[repr(C)]
pub struct SECPKG_SHORT_VECTOR {
pub ShortArrayOffset: u32,
pub ShortArrayCount: u16,
}
#[repr(C)]
pub struct SECPKG_BYTE_VECTOR {
pub ByteArrayOffset: u32,
pub ByteArrayLength: u16,
}
#[repr(C)]
pub struct SECPKG_SUPPLIED_CREDENTIAL {
pub cbHeaderLength: u16,
pub cbStructureLength: u16,
pub UserName: SECPKG_SHORT_VECTOR,
pub DomainName: SECPKG_SHORT_VECTOR,
pub PackedCredentials: SECPKG_BYTE_VECTOR,
pub CredFlags: u32,
}import "golang.org/x/sys/windows"
type SECPKG_SHORT_VECTOR struct {
ShortArrayOffset uint32
ShortArrayCount uint16
}
type SECPKG_BYTE_VECTOR struct {
ByteArrayOffset uint32
ByteArrayLength uint16
}
type SECPKG_SUPPLIED_CREDENTIAL struct {
cbHeaderLength uint16
cbStructureLength uint16
UserName SECPKG_SHORT_VECTOR
DomainName SECPKG_SHORT_VECTOR
PackedCredentials SECPKG_BYTE_VECTOR
CredFlags uint32
}type
SECPKG_SHORT_VECTOR = record
ShortArrayOffset: DWORD;
ShortArrayCount: Word;
end;
SECPKG_BYTE_VECTOR = record
ByteArrayOffset: DWORD;
ByteArrayLength: Word;
end;
SECPKG_SUPPLIED_CREDENTIAL = record
cbHeaderLength: Word;
cbStructureLength: Word;
UserName: SECPKG_SHORT_VECTOR;
DomainName: SECPKG_SHORT_VECTOR;
PackedCredentials: SECPKG_BYTE_VECTOR;
CredFlags: DWORD;
end;const SECPKG_SHORT_VECTOR = extern struct {
ShortArrayOffset: u32,
ShortArrayCount: u16,
};
const SECPKG_BYTE_VECTOR = extern struct {
ByteArrayOffset: u32,
ByteArrayLength: u16,
};
const SECPKG_SUPPLIED_CREDENTIAL = extern struct {
cbHeaderLength: u16,
cbStructureLength: u16,
UserName: SECPKG_SHORT_VECTOR,
DomainName: SECPKG_SHORT_VECTOR,
PackedCredentials: SECPKG_BYTE_VECTOR,
CredFlags: u32,
};type
SECPKG_SHORT_VECTOR {.bycopy.} = object
ShortArrayOffset: uint32
ShortArrayCount: uint16
SECPKG_BYTE_VECTOR {.bycopy.} = object
ByteArrayOffset: uint32
ByteArrayLength: uint16
SECPKG_SUPPLIED_CREDENTIAL {.bycopy.} = object
cbHeaderLength: uint16
cbStructureLength: uint16
UserName: SECPKG_SHORT_VECTOR
DomainName: SECPKG_SHORT_VECTOR
PackedCredentials: SECPKG_BYTE_VECTOR
CredFlags: uint32struct SECPKG_SHORT_VECTOR
{
uint ShortArrayOffset;
ushort ShortArrayCount;
}
struct SECPKG_BYTE_VECTOR
{
uint ByteArrayOffset;
ushort ByteArrayLength;
}
struct SECPKG_SUPPLIED_CREDENTIAL
{
ushort cbHeaderLength;
ushort cbStructureLength;
SECPKG_SHORT_VECTOR UserName;
SECPKG_SHORT_VECTOR DomainName;
SECPKG_BYTE_VECTOR PackedCredentials;
uint CredFlags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SECPKG_SUPPLIED_CREDENTIAL サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; cbHeaderLength : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; cbStructureLength : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; UserName : SECPKG_SHORT_VECTOR (+4, 8byte) varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; DomainName : SECPKG_SHORT_VECTOR (+12, 8byte) varptr(st)+12 を基点に操作(8byte:入れ子/配列)
; PackedCredentials : SECPKG_BYTE_VECTOR (+20, 8byte) varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; CredFlags : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global SECPKG_SHORT_VECTOR
#field int ShortArrayOffset
#field short ShortArrayCount
#endstruct
#defstruct global SECPKG_BYTE_VECTOR
#field int ByteArrayOffset
#field short ByteArrayLength
#endstruct
#defstruct global SECPKG_SUPPLIED_CREDENTIAL
#field short cbHeaderLength
#field short cbStructureLength
#field SECPKG_SHORT_VECTOR UserName
#field SECPKG_SHORT_VECTOR DomainName
#field SECPKG_BYTE_VECTOR PackedCredentials
#field int CredFlags
#endstruct
stdim st, SECPKG_SUPPLIED_CREDENTIAL ; NSTRUCT 変数を確保
st->cbHeaderLength = 100
mes "cbHeaderLength=" + st->cbHeaderLength