ホーム › System.Rpc › RDR_CALLOUT_STATE
RDR_CALLOUT_STATE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| LastError | RPC_STATUS | 4 | +0 | +0 | 直近のエラーステータス。RPC_STATUSで表す。 |
| LastEEInfo | void* | 8/4 | +8 | +4 | 直近の拡張エラー情報へのポインター。 |
| LastCalledStage | RPC_HTTP_REDIRECTOR_STAGE | 4 | +16 | +8 | 最後に呼ばれたリダイレクター処理段階。RPC_HTTP_REDIRECTOR_STAGEで表す。 |
| ServerName | WORD* | 8/4 | +24 | +12 | サーバー名。Unicode(WORD)文字列へのポインター。 |
| ServerPort | WORD* | 8/4 | +32 | +16 | サーバーポート。Unicode(WORD)文字列へのポインター。 |
| RemoteUser | WORD* | 8/4 | +40 | +20 | リモートユーザー名。Unicode(WORD)文字列へのポインター。 |
| AuthType | WORD* | 8/4 | +48 | +24 | 認証タイプ。Unicode(WORD)文字列へのポインター。 |
| ResourceTypePresent | BYTE | 1 | +56 | +28 | ResourceTypeが有効かを示すフラグ。BYTE値。 |
| SessionIdPresent | BYTE | 1 | +57 | +29 | SessionIdが有効かを示すフラグ。BYTE値。 |
| InterfacePresent | BYTE | 1 | +58 | +30 | Interfaceが有効かを示すフラグ。BYTE値。 |
| ResourceType | GUID | 16 | +60 | +32 | リソース種別を識別するGUID。 |
| SessionId | GUID | 16 | +76 | +48 | セッションを識別するGUID。 |
| Interface | RPC_SYNTAX_IDENTIFIER | 20 | +92 | +64 | インターフェイス識別子。RPC_SYNTAX_IDENTIFIERで表す。 |
| CertContext | void* | 8/4 | +112 | +84 | 証明書コンテキストへのポインター。 |
各言語での定義
#include <windows.h>
// RPC_VERSION (x64 4 / x86 4 バイト)
typedef struct RPC_VERSION {
WORD MajorVersion;
WORD MinorVersion;
} RPC_VERSION;
// RPC_SYNTAX_IDENTIFIER (x64 20 / x86 20 バイト)
typedef struct RPC_SYNTAX_IDENTIFIER {
GUID SyntaxGUID;
RPC_VERSION SyntaxVersion;
} RPC_SYNTAX_IDENTIFIER;
// RDR_CALLOUT_STATE (x64 120 / x86 88 バイト)
typedef struct RDR_CALLOUT_STATE {
RPC_STATUS LastError;
void* LastEEInfo;
RPC_HTTP_REDIRECTOR_STAGE LastCalledStage;
WORD* ServerName;
WORD* ServerPort;
WORD* RemoteUser;
WORD* AuthType;
BYTE ResourceTypePresent;
BYTE SessionIdPresent;
BYTE InterfacePresent;
GUID ResourceType;
GUID SessionId;
RPC_SYNTAX_IDENTIFIER Interface;
void* CertContext;
} RDR_CALLOUT_STATE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RPC_VERSION
{
public ushort MajorVersion;
public ushort MinorVersion;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RPC_SYNTAX_IDENTIFIER
{
public Guid SyntaxGUID;
public RPC_VERSION SyntaxVersion;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RDR_CALLOUT_STATE
{
public int LastError;
public IntPtr LastEEInfo;
public int LastCalledStage;
public IntPtr ServerName;
public IntPtr ServerPort;
public IntPtr RemoteUser;
public IntPtr AuthType;
public byte ResourceTypePresent;
public byte SessionIdPresent;
public byte InterfacePresent;
public Guid ResourceType;
public Guid SessionId;
public RPC_SYNTAX_IDENTIFIER Interface;
public IntPtr CertContext;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RPC_VERSION
Public MajorVersion As UShort
Public MinorVersion As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RPC_SYNTAX_IDENTIFIER
Public SyntaxGUID As Guid
Public SyntaxVersion As RPC_VERSION
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RDR_CALLOUT_STATE
Public LastError As Integer
Public LastEEInfo As IntPtr
Public LastCalledStage As Integer
Public ServerName As IntPtr
Public ServerPort As IntPtr
Public RemoteUser As IntPtr
Public AuthType As IntPtr
Public ResourceTypePresent As Byte
Public SessionIdPresent As Byte
Public InterfacePresent As Byte
Public ResourceType As Guid
Public SessionId As Guid
Public Interface As RPC_SYNTAX_IDENTIFIER
Public CertContext As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class RPC_VERSION(ctypes.Structure):
_fields_ = [
("MajorVersion", ctypes.c_ushort),
("MinorVersion", ctypes.c_ushort),
]
class RPC_SYNTAX_IDENTIFIER(ctypes.Structure):
_fields_ = [
("SyntaxGUID", GUID),
("SyntaxVersion", RPC_VERSION),
]
class RDR_CALLOUT_STATE(ctypes.Structure):
_fields_ = [
("LastError", ctypes.c_int),
("LastEEInfo", ctypes.c_void_p),
("LastCalledStage", ctypes.c_int),
("ServerName", ctypes.c_void_p),
("ServerPort", ctypes.c_void_p),
("RemoteUser", ctypes.c_void_p),
("AuthType", ctypes.c_void_p),
("ResourceTypePresent", ctypes.c_ubyte),
("SessionIdPresent", ctypes.c_ubyte),
("InterfacePresent", ctypes.c_ubyte),
("ResourceType", GUID),
("SessionId", GUID),
("Interface", RPC_SYNTAX_IDENTIFIER),
("CertContext", ctypes.c_void_p),
]#[repr(C)]
pub struct RPC_VERSION {
pub MajorVersion: u16,
pub MinorVersion: u16,
}
#[repr(C)]
pub struct RPC_SYNTAX_IDENTIFIER {
pub SyntaxGUID: GUID,
pub SyntaxVersion: RPC_VERSION,
}
#[repr(C)]
pub struct RDR_CALLOUT_STATE {
pub LastError: i32,
pub LastEEInfo: *mut core::ffi::c_void,
pub LastCalledStage: i32,
pub ServerName: *mut core::ffi::c_void,
pub ServerPort: *mut core::ffi::c_void,
pub RemoteUser: *mut core::ffi::c_void,
pub AuthType: *mut core::ffi::c_void,
pub ResourceTypePresent: u8,
pub SessionIdPresent: u8,
pub InterfacePresent: u8,
pub ResourceType: GUID,
pub SessionId: GUID,
pub Interface: RPC_SYNTAX_IDENTIFIER,
pub CertContext: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type RPC_VERSION struct {
MajorVersion uint16
MinorVersion uint16
}
type RPC_SYNTAX_IDENTIFIER struct {
SyntaxGUID windows.GUID
SyntaxVersion RPC_VERSION
}
type RDR_CALLOUT_STATE struct {
LastError int32
LastEEInfo uintptr
LastCalledStage int32
ServerName uintptr
ServerPort uintptr
RemoteUser uintptr
AuthType uintptr
ResourceTypePresent byte
SessionIdPresent byte
InterfacePresent byte
ResourceType windows.GUID
SessionId windows.GUID
Interface RPC_SYNTAX_IDENTIFIER
CertContext uintptr
}type
RPC_VERSION = record
MajorVersion: Word;
MinorVersion: Word;
end;
RPC_SYNTAX_IDENTIFIER = record
SyntaxGUID: TGUID;
SyntaxVersion: RPC_VERSION;
end;
RDR_CALLOUT_STATE = record
LastError: Integer;
LastEEInfo: Pointer;
LastCalledStage: Integer;
ServerName: Pointer;
ServerPort: Pointer;
RemoteUser: Pointer;
AuthType: Pointer;
ResourceTypePresent: Byte;
SessionIdPresent: Byte;
InterfacePresent: Byte;
ResourceType: TGUID;
SessionId: TGUID;
Interface: RPC_SYNTAX_IDENTIFIER;
CertContext: Pointer;
end;const RPC_VERSION = extern struct {
MajorVersion: u16,
MinorVersion: u16,
};
const RPC_SYNTAX_IDENTIFIER = extern struct {
SyntaxGUID: GUID,
SyntaxVersion: RPC_VERSION,
};
const RDR_CALLOUT_STATE = extern struct {
LastError: i32,
LastEEInfo: ?*anyopaque,
LastCalledStage: i32,
ServerName: ?*anyopaque,
ServerPort: ?*anyopaque,
RemoteUser: ?*anyopaque,
AuthType: ?*anyopaque,
ResourceTypePresent: u8,
SessionIdPresent: u8,
InterfacePresent: u8,
ResourceType: GUID,
SessionId: GUID,
Interface: RPC_SYNTAX_IDENTIFIER,
CertContext: ?*anyopaque,
};type
RPC_VERSION {.bycopy.} = object
MajorVersion: uint16
MinorVersion: uint16
RPC_SYNTAX_IDENTIFIER {.bycopy.} = object
SyntaxGUID: GUID
SyntaxVersion: RPC_VERSION
RDR_CALLOUT_STATE {.bycopy.} = object
LastError: int32
LastEEInfo: pointer
LastCalledStage: int32
ServerName: pointer
ServerPort: pointer
RemoteUser: pointer
AuthType: pointer
ResourceTypePresent: uint8
SessionIdPresent: uint8
InterfacePresent: uint8
ResourceType: GUID
SessionId: GUID
Interface: RPC_SYNTAX_IDENTIFIER
CertContext: pointerstruct RPC_VERSION
{
ushort MajorVersion;
ushort MinorVersion;
}
struct RPC_SYNTAX_IDENTIFIER
{
GUID SyntaxGUID;
RPC_VERSION SyntaxVersion;
}
struct RDR_CALLOUT_STATE
{
int LastError;
void* LastEEInfo;
int LastCalledStage;
void* ServerName;
void* ServerPort;
void* RemoteUser;
void* AuthType;
ubyte ResourceTypePresent;
ubyte SessionIdPresent;
ubyte InterfacePresent;
GUID ResourceType;
GUID SessionId;
RPC_SYNTAX_IDENTIFIER Interface;
void* CertContext;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RDR_CALLOUT_STATE サイズ: 88 バイト(x86)
dim st, 22 ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; LastError : RPC_STATUS (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; LastEEInfo : void* (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; LastCalledStage : RPC_HTTP_REDIRECTOR_STAGE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ServerName : WORD* (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ServerPort : WORD* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; RemoteUser : WORD* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; AuthType : WORD* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ResourceTypePresent : BYTE (+28, 1byte) poke st,28,値 / 値 = peek(st,28)
; SessionIdPresent : BYTE (+29, 1byte) poke st,29,値 / 値 = peek(st,29)
; InterfacePresent : BYTE (+30, 1byte) poke st,30,値 / 値 = peek(st,30)
; ResourceType : GUID (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; SessionId : GUID (+48, 16byte) varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; Interface : RPC_SYNTAX_IDENTIFIER (+64, 20byte) varptr(st)+64 を基点に操作(20byte:入れ子/配列)
; CertContext : void* (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RDR_CALLOUT_STATE サイズ: 120 バイト(x64)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; LastError : RPC_STATUS (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; LastEEInfo : void* (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; LastCalledStage : RPC_HTTP_REDIRECTOR_STAGE (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ServerName : WORD* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ServerPort : WORD* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; RemoteUser : WORD* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; AuthType : WORD* (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ResourceTypePresent : BYTE (+56, 1byte) poke st,56,値 / 値 = peek(st,56)
; SessionIdPresent : BYTE (+57, 1byte) poke st,57,値 / 値 = peek(st,57)
; InterfacePresent : BYTE (+58, 1byte) poke st,58,値 / 値 = peek(st,58)
; ResourceType : GUID (+60, 16byte) varptr(st)+60 を基点に操作(16byte:入れ子/配列)
; SessionId : GUID (+76, 16byte) varptr(st)+76 を基点に操作(16byte:入れ子/配列)
; Interface : RPC_SYNTAX_IDENTIFIER (+92, 20byte) varptr(st)+92 を基点に操作(20byte:入れ子/配列)
; CertContext : void* (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global RPC_VERSION
#field short MajorVersion
#field short MinorVersion
#endstruct
#defstruct global RPC_SYNTAX_IDENTIFIER
#field GUID SyntaxGUID
#field RPC_VERSION SyntaxVersion
#endstruct
#defstruct global RDR_CALLOUT_STATE
#field int LastError
#field intptr LastEEInfo
#field int LastCalledStage
#field intptr ServerName
#field intptr ServerPort
#field intptr RemoteUser
#field intptr AuthType
#field byte ResourceTypePresent
#field byte SessionIdPresent
#field byte InterfacePresent
#field GUID ResourceType
#field GUID SessionId
#field RPC_SYNTAX_IDENTIFIER Interface
#field intptr CertContext
#endstruct
stdim st, RDR_CALLOUT_STATE ; NSTRUCT 変数を確保
st->LastError = 100
mes "LastError=" + st->LastError