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

SecPkgInfoA

構造体
サイズ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
委任 (delegation) をサポートします。
SECPKG_FLAG_READONLY_WITH_CHECKSUM
0x40000
セキュリティパッケージは、EncryptMessage 関数を呼び出す際に、その場での暗号化 (in-place encryption) の代わりにチェックサムを使用することをサポートします。
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トークンの最大サイズをバイト単位で指定します。
NameCHAR*8/4+16+12セキュリティパッケージの名前を格納する、null で終わる文字列へのポインターです。
CommentCHAR*8/4+24+16null で終わる文字列へのポインターです。パッケージが返す任意の追加文字列を指定できます。

公式ドキュメント

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

解説(Remarks)

メモ

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

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

各言語での定義

#include <windows.h>

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

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SecPkgInfoA
{
    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 SecPkgInfoA
    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 SecPkgInfoA(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 SecPkgInfoA {
    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 SecPkgInfoA struct {
	fCapabilities uint32
	wVersion uint16
	wRPCID uint16
	cbMaxToken uint32
	Name uintptr
	Comment uintptr
}
type
  SecPkgInfoA = record
    fCapabilities: DWORD;
    wVersion: Word;
    wRPCID: Word;
    cbMaxToken: DWORD;
    Name: Pointer;
    Comment: Pointer;
  end;
const SecPkgInfoA = extern struct {
    fCapabilities: u32,
    wVersion: u16,
    wRPCID: u16,
    cbMaxToken: u32,
    Name: ?*anyopaque,
    Comment: ?*anyopaque,
};
type
  SecPkgInfoA {.bycopy.} = object
    fCapabilities: uint32
    wVersion: uint16
    wRPCID: uint16
    cbMaxToken: uint32
    Name: pointer
    Comment: pointer
struct SecPkgInfoA
{
    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 レイアウト)
; SecPkgInfoA サイズ: 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 : CHAR* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Comment : CHAR* (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SecPkgInfoA サイズ: 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 : CHAR* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; Comment : CHAR* (+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 SecPkgInfoA
    #field int fCapabilities
    #field short wVersion
    #field short wRPCID
    #field int cbMaxToken
    #field intptr Name
    #field intptr Comment
#endstruct

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