COAUTHINFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwAuthnSvc | DWORD | 4 | +0 | +0 | 使用する認証サービスです。値の一覧については、Authentication Service Constants を参照してください。認証が不要な場合は RPC_C_AUTHN_NONE を使用します。既定値は RPC_C_AUTHN_WINNT で、RPC_C_AUTHN_GSS_KERBEROS もサポートされます。 |
| dwAuthzSvc | DWORD | 4 | +4 | +4 | 使用する承認サービスです。値の一覧については、Authorization Constants を参照してください。NT 認証サービスを使用するには、RPC_C_AUTHZ_NONE を指定します。 |
| pwszServerPrincName | LPWSTR | 8/4 | +8 | +8 | 認証サービスで使用するサーバープリンシパル名です。RPC_C_AUTHN_WINNT を使用している場合、プリンシパル名は NULL でなければなりません。 |
| dwAuthnLevel | DWORD | 4 | +16 | +12 | 使用する認証レベルです。値の一覧については、Authentication Level Constants を参照してください。 Windows Server 2003 以降では、リモートアクティベーションは CoInitializeSecurity の dwAuthnLevel パラメーターで指定された既定の認証レベルを使用します。それ以前のバージョンの Windows では、別のレベルが明示的に指定されない限り、セキュリティレベルとして常に RPC_C_AUTHN_LEVEL_CONNECT が使用されていました。 |
| dwImpersonationLevel | DWORD | 4 | +20 | +16 | 使用する偽装レベルです。値の一覧については、Impersonation Level Constants を参照してください。この値は RPC_C_IMP_LEVEL_IMPERSONATE 以上でなければなりません。 |
| pAuthIdentityData | COAUTHIDENTITY* | 8/4 | +24 | +20 | 既定以外のクライアント ID を設定する COAUTHIDENTITY 構造体へのポインターです。このパラメーターが NULL の場合は、クライアントの実際の ID が使用されます。構造体メンバーの値は認証サービスごとに異なります。dwAuthnSvc が承認サービスとして NTLMSSP または Kerberos ネットワーク認証プロトコルを使用することを指定していない場合、この値は NULL でなければなりません。 |
| dwCapabilities | DWORD | 4 | +32 | +24 | このプロキシの追加機能を示します。現在のところ、このメンバーは EOAC_NONE (0x0) または RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH (0x1) でなければなりません。Kerberos が必要な場合は RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH を使用します。 |
公式ドキュメント
クライアントコンピューターからサーバーコンピューターへリモートアクティベーション要求を行う際に使用される認証設定を格納します。
解説(Remarks)
COSERVERINFO の pAuthInfo に NULL を設定した場合は、Snego によってクライアントとサーバーの間で機能する認証サービスがネゴシエートされます。ただし、次のいずれかの目的を満たすために、pAuthInfo に NULL 以外の COAUTHINFO 構造体を指定することもできます。
- コンピューターのリモートアクティベーションに対して別のクライアント ID を指定する。指定した ID は、実際のクライアント ID ではなく、サーバー上の起動アクセス許可のチェックに使用されます。
- マシンのリモートアクティベーションに NTLMSSP ではなく Kerberos を使用することを指定する。既定以外のクライアント ID は、指定してもしなくても構いません。
- セキュリティで保護されないアクティベーションを要求する。
- 独自の認証サービスを指定する。
dwAuthzSvc、pwszServerPrincName、dwImpersonationLevel、dwCapabilities に誤った値を設定して CoGetClassObject または CoCreateInstanceEx を呼び出しても、これらの関数は E_INVALIDARG や同様のエラーを返しません。誤った値の代わりに既定値が使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// COAUTHINFO (x64 40 / x86 28 バイト)
typedef struct COAUTHINFO {
DWORD dwAuthnSvc;
DWORD dwAuthzSvc;
LPWSTR pwszServerPrincName;
DWORD dwAuthnLevel;
DWORD dwImpersonationLevel;
COAUTHIDENTITY* pAuthIdentityData;
DWORD dwCapabilities;
} COAUTHINFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct COAUTHINFO
{
public uint dwAuthnSvc;
public uint dwAuthzSvc;
public IntPtr pwszServerPrincName;
public uint dwAuthnLevel;
public uint dwImpersonationLevel;
public IntPtr pAuthIdentityData;
public uint dwCapabilities;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure COAUTHINFO
Public dwAuthnSvc As UInteger
Public dwAuthzSvc As UInteger
Public pwszServerPrincName As IntPtr
Public dwAuthnLevel As UInteger
Public dwImpersonationLevel As UInteger
Public pAuthIdentityData As IntPtr
Public dwCapabilities As UInteger
End Structureimport ctypes
from ctypes import wintypes
class COAUTHINFO(ctypes.Structure):
_fields_ = [
("dwAuthnSvc", wintypes.DWORD),
("dwAuthzSvc", wintypes.DWORD),
("pwszServerPrincName", ctypes.c_void_p),
("dwAuthnLevel", wintypes.DWORD),
("dwImpersonationLevel", wintypes.DWORD),
("pAuthIdentityData", ctypes.c_void_p),
("dwCapabilities", wintypes.DWORD),
]#[repr(C)]
pub struct COAUTHINFO {
pub dwAuthnSvc: u32,
pub dwAuthzSvc: u32,
pub pwszServerPrincName: *mut core::ffi::c_void,
pub dwAuthnLevel: u32,
pub dwImpersonationLevel: u32,
pub pAuthIdentityData: *mut core::ffi::c_void,
pub dwCapabilities: u32,
}import "golang.org/x/sys/windows"
type COAUTHINFO struct {
dwAuthnSvc uint32
dwAuthzSvc uint32
pwszServerPrincName uintptr
dwAuthnLevel uint32
dwImpersonationLevel uint32
pAuthIdentityData uintptr
dwCapabilities uint32
}type
COAUTHINFO = record
dwAuthnSvc: DWORD;
dwAuthzSvc: DWORD;
pwszServerPrincName: Pointer;
dwAuthnLevel: DWORD;
dwImpersonationLevel: DWORD;
pAuthIdentityData: Pointer;
dwCapabilities: DWORD;
end;const COAUTHINFO = extern struct {
dwAuthnSvc: u32,
dwAuthzSvc: u32,
pwszServerPrincName: ?*anyopaque,
dwAuthnLevel: u32,
dwImpersonationLevel: u32,
pAuthIdentityData: ?*anyopaque,
dwCapabilities: u32,
};type
COAUTHINFO {.bycopy.} = object
dwAuthnSvc: uint32
dwAuthzSvc: uint32
pwszServerPrincName: pointer
dwAuthnLevel: uint32
dwImpersonationLevel: uint32
pAuthIdentityData: pointer
dwCapabilities: uint32struct COAUTHINFO
{
uint dwAuthnSvc;
uint dwAuthzSvc;
void* pwszServerPrincName;
uint dwAuthnLevel;
uint dwImpersonationLevel;
void* pAuthIdentityData;
uint dwCapabilities;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; COAUTHINFO サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; dwAuthnSvc : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAuthzSvc : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pwszServerPrincName : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwAuthnLevel : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwImpersonationLevel : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pAuthIdentityData : COAUTHIDENTITY* (+20, 4byte) varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; dwCapabilities : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; COAUTHINFO サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwAuthnSvc : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAuthzSvc : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pwszServerPrincName : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwAuthnLevel : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwImpersonationLevel : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pAuthIdentityData : COAUTHIDENTITY* (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; dwCapabilities : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global COAUTHINFO
#field int dwAuthnSvc
#field int dwAuthzSvc
#field intptr pwszServerPrincName
#field int dwAuthnLevel
#field int dwImpersonationLevel
#field intptr pAuthIdentityData
#field int dwCapabilities
#endstruct
stdim st, COAUTHINFO ; NSTRUCT 変数を確保
st->dwAuthnSvc = 100
mes "dwAuthnSvc=" + st->dwAuthnSvc