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

SecPkgInfoW

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

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

フィールド

フィールドサイズx64x86説明
fCapabilitiesDWORD4+0+0

セキュリティ パッケージの機能を表すビット フラグのセットです。このメンバーには、次のフラグの組み合わせを指定できます。

意味
SECPKG_FLAG_INTEGRITY
0x1
セキュリティ パッケージは MakeSignature 関数と VerifySignature 関数をサポートします。
SECPKG_FLAG_PRIVACY
0x2
セキュリティ パッケージは EncryptMessage (General) 関数と DecryptMessage (General) 関数をサポートします。
SECPKG_FLAG_TOKEN_ONLY
0x4
このパッケージはメッセージのセキュリティ トークン部分のみを扱い、その他のバッファーは無視します。これはパフォーマンスに関する事項です。
SECPKG_FLAG_DATAGRAM
0x8
データグラム形式の認証をサポートします。詳細については、 SSPI Context Semantics を参照してください。
重要 Microsoft Kerberos パッケージは、ユーザー間 (user-to-user) モードではデータグラム コンテキストをサポートしません。
SECPKG_FLAG_CONNECTION
0x10
コネクション指向形式の認証をサポートします。詳細については、 SSPI Context Semantics を参照してください。
SECPKG_FLAG_MULTI_REQUIRED
0x20
認証には複数回のやり取り (レグ) が必要です。
SECPKG_FLAG_CLIENT_ONLY
0x40
サーバー認証のサポートは提供されません。
SECPKG_FLAG_EXTENDED_ERROR
0x80
拡張エラー処理をサポートします。詳細については、 Extended Error Information を参照してください。
SECPKG_FLAG_IMPERSONATION
0x100
サーバー コンテキストでの Windows の偽装 (impersonation) をサポートします。
SECPKG_FLAG_ACCEPT_WIN32_NAME
0x200
Windows のプリンシパル名とターゲット名を認識します。
SECPKG_FLAG_STREAM
0x400
ストリーム セマンティクスをサポートします。詳細については、 SSPI Context Semantics を参照してください。
SECPKG_FLAG_NEGOTIABLE
0X800
Microsoft Negotiate セキュリティ パッケージから使用できます。
SECPKG_FLAG_GSS_COMPATIBLE
0x1000
GSS 互換性をサポートします。
SECPKG_FLAG_LOGON
0x2000
LsaLogonUser をサポートします。
SECPKG_FLAG_ASCII_BUFFERS
0x4000
トークン バッファーは ASCII 文字形式です。
SECPKG_FLAG_FRAGMENT
0x8000
大きなトークンを小さなバッファーに分割することをサポートします。これにより、アプリケーションは小さなバッファーを使用して InitializeSecurityContext (General)AcceptSecurityContext (General) を繰り返し呼び出して認証を完了できます。
SECPKG_FLAG_MUTUAL_AUTH
0x10000
相互認証をサポートします。
SECPKG_FLAG_DELEGATION
0x20000
委任をサポートします。
SECPKG_FLAG_READONLY_WITH_CHECKSUM
0x40000
セキュリティ パッケージは、EncryptMessage 関数の呼び出し時に、その場での暗号化ではなくチェックサムを使用することをサポートします。
SECPKG_FLAG_RESTRICTED_TOKENS
0x80000
制限付きトークンを持つ呼び出し元をサポートします。
SECPKG_FLAG_NEGO_EXTENDER
0x00100000
セキュリティ パッケージが Microsoft Negotiate セキュリティ パッケージを拡張します。この種類のパッケージは最大 1 つです。
SECPKG_FLAG_NEGOTIABLE2
0x00200000
このパッケージは、SECPKG_FLAG_NEGO_EXTENDER 型のパッケージによってネゴシエートされます。
SECPKG_FLAG_APPCONTAINER_PASSTHROUGH
0x00400000
このパッケージは、アプリ コンテナー アプリからのすべての呼び出しを受け取ります。
SECPKG_FLAG_APPCONTAINER_CHECKS
0x00800000
このパッケージは、次のいずれかのチェックが成功した場合に、アプリ コンテナー アプリからの呼び出しを受け取ります。
  • 呼び出し元が既定の資格情報を使用する機能を持っている。
  • ターゲットがプロキシ サーバーである。
  • 呼び出し元が資格情報を提供している。
SECPKG_CALLFLAGS_APPCONTAINER
0x00000001
呼び出し元はアプリ コンテナーです。
SECPKG_CALLFLAGS_AUTHCAPABLE
0x00000002
呼び出し元は既定の資格情報を使用できます。
SECPKG_CALLFLAGS_FORCE_SUPPLIED
0x00000004
呼び出し元は、提供された資格情報のみを使用できます。
wVersionWORD2+4+4パッケージ プロトコルのバージョンを指定します。1 でなければなりません。
wRPCIDWORD2+6+6該当する場合に DCE RPC 識別子を指定します。パッケージが DCE に登録されたセキュリティ システムのいずれも実装していない場合は、予約値 SECPKG_ID_NONE が使用されます。
cbMaxTokenDWORD4+8+8トークンの最大サイズをバイト単位で指定します。
NameWORD*8/4+16+12セキュリティ パッケージの名前を格納する、null 終端文字列へのポインターです。
CommentWORD*8/4+24+16null 終端文字列へのポインターです。これは、パッケージが返す任意の追加文字列です。

公式ドキュメント

SecPkgInfo 構造体は、名前や機能など、セキュリティ パッケージに関する一般的な情報を提供します。

解説(Remarks)

メモ

sspi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして SecPkgInfo を定義します。エンコード中立のエイリアスを、エンコード中立でないコードと混在させて使用すると、不一致が生じ、コンパイル エラーや実行時エラーの原因となることがあります。詳細については、Conventions for Function Prototypes を参照してください。

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

各言語での定義

#include <windows.h>

// SecPkgInfoW  (x64 32 / x86 20 バイト)
typedef struct SecPkgInfoW {
    DWORD fCapabilities;
    WORD wVersion;
    WORD wRPCID;
    DWORD cbMaxToken;
    WORD* Name;
    WORD* Comment;
} SecPkgInfoW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SecPkgInfoW
{
    public uint fCapabilities;
    public ushort wVersion;
    public ushort wRPCID;
    public uint cbMaxToken;
    public IntPtr Name;
    public IntPtr Comment;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SecPkgInfoW
    Public fCapabilities As UInteger
    Public wVersion As UShort
    Public wRPCID As UShort
    Public cbMaxToken As UInteger
    Public Name As IntPtr
    Public Comment As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class SecPkgInfoW(ctypes.Structure):
    _fields_ = [
        ("fCapabilities", wintypes.DWORD),
        ("wVersion", ctypes.c_ushort),
        ("wRPCID", ctypes.c_ushort),
        ("cbMaxToken", wintypes.DWORD),
        ("Name", ctypes.c_void_p),
        ("Comment", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct SecPkgInfoW {
    pub fCapabilities: u32,
    pub wVersion: u16,
    pub wRPCID: u16,
    pub cbMaxToken: u32,
    pub Name: *mut core::ffi::c_void,
    pub Comment: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type SecPkgInfoW struct {
	fCapabilities uint32
	wVersion uint16
	wRPCID uint16
	cbMaxToken uint32
	Name uintptr
	Comment uintptr
}
type
  SecPkgInfoW = record
    fCapabilities: DWORD;
    wVersion: Word;
    wRPCID: Word;
    cbMaxToken: DWORD;
    Name: Pointer;
    Comment: Pointer;
  end;
const SecPkgInfoW = extern struct {
    fCapabilities: u32,
    wVersion: u16,
    wRPCID: u16,
    cbMaxToken: u32,
    Name: ?*anyopaque,
    Comment: ?*anyopaque,
};
type
  SecPkgInfoW {.bycopy.} = object
    fCapabilities: uint32
    wVersion: uint16
    wRPCID: uint16
    cbMaxToken: uint32
    Name: pointer
    Comment: pointer
struct SecPkgInfoW
{
    uint fCapabilities;
    ushort wVersion;
    ushort wRPCID;
    uint cbMaxToken;
    void* Name;
    void* Comment;
}

HSP用 定義

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

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

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