Win32 API 日本語リファレンス
ホームStorage.FileSystem › FILE_REMOTE_PROTOCOL_INFO

FILE_REMOTE_PROTOCOL_INFO

構造体
サイズx64: 120 バイト / x86: 116 バイト

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

フィールド

フィールドサイズx64x86説明
StructureVersionWORD2+0+0この構造体のバージョンです。このメンバーは、通信が Windows 8、Windows Server 2012 以降を実行しているコンピューター間で行われる場合は 2 に、それ以外の場合は 1 に設定してください。
StructureSizeWORD2+2+2この構造体のサイズです。このメンバーには sizeof(FILE_REMOTE_PROTOCOL_INFO) を設定してください。
ProtocolDWORD4+4+4

Wnnc.h または Ntifs.h で定義されているリモートプロトコル (WNNC_NET_*) です。

WNNC_NET_MSNET (0x00010000)

WNNC_NET_SMB (0x00020000)

WNNC_NET_LANMAN (0x00020000)

WNNC_NET_NETWARE (0x00030000)

WNNC_NET_VINES (0x00040000)

WNNC_NET_10NET (0x00050000)

WNNC_NET_LOCUS (0x00060000)

WNNC_NET_SUN_PC_NFS (0x00070000)

WNNC_NET_LANSTEP (0x00080000)

WNNC_NET_9TILES (0x00090000)

WNNC_NET_LANTASTIC (0x000A0000)

WNNC_NET_AS400 (0x000B0000)

WNNC_NET_FTP_NFS (0x000C0000)

WNNC_NET_PATHWORKS (0x000D0000)

WNNC_NET_LIFENET (0x000E0000)

WNNC_NET_POWERLAN (0x000F0000)

WNNC_NET_BWNFS (0x00100000)

WNNC_NET_COGENT (0x00110000)

WNNC_NET_FARALLON (0x00120000)

WNNC_NET_APPLETALK (0x00130000)

WNNC_NET_INTERGRAPH (0x00140000)

WNNC_NET_SYMFONET (0x00150000)

WNNC_NET_CLEARCASE (0x00160000)

WNNC_NET_FRONTIER (0x00170000)

WNNC_NET_BMC (0x00180000)

WNNC_NET_DCE (0x00190000)

WNNC_NET_AVID (0x001A0000)

WNNC_NET_DOCUSPACE (0x001B0000)

WNNC_NET_MANGOSOFT (0x001C0000)

WNNC_NET_SERNET (0x001D0000)

WNNC_NET_RIVERFRONT1 (0x001E0000)

WNNC_NET_RIVERFRONT2 (0x001F0000)

WNNC_NET_DECORB (0x00200000)

WNNC_NET_PROTSTOR (0x00210000)

WNNC_NET_FJ_REDIR (0x00220000)

WNNC_NET_DISTINCT (0x00230000)

WNNC_NET_TWINS (0x00240000)

WNNC_NET_RDR2SAMPLE (0x00250000)

WNNC_NET_CSC (0x00260000)

WNNC_NET_3IN1 (0x00270000)

WNNC_NET_EXTENDNET (0x00290000)

WNNC_NET_STAC (0x002A0000)

WNNC_NET_FOXBAT (0x002B0000)

WNNC_NET_YAHOO (0x002C0000)

WNNC_NET_EXIFS (0x002D0000)

WNNC_NET_DAV (0x002E0000)

WNNC_NET_KNOWARE (0x002F0000)

WNNC_NET_OBJECT_DIRE (0x00300000)

WNNC_NET_MASFAX (0x00310000)

WNNC_NET_HOB_NFS (0x00320000)

WNNC_NET_SHIVA (0x00330000)

WNNC_NET_IBMAL (0x00340000)

WNNC_NET_LOCK (0x00350000)

WNNC_NET_TERMSRV (0x00360000)

WNNC_NET_SRT (0x00370000)

WNNC_NET_QUINCY (0x00380000)

WNNC_NET_OPENAFS (0x00390000)

WNNC_NET_AVID1 (0x003A0000)

WNNC_NET_DFS (0x003B0000)

WNNC_NET_KWNP (0x003C0000)

WNNC_NET_ZENWORKS (0x003D0000)

WNNC_NET_DRIVEONWEB (0x003E0000)

WNNC_NET_VMWARE (0x003F0000)

WNNC_NET_RSFX (0x00400000)

WNNC_NET_MFILES (0x00410000)

WNNC_NET_MS_NFS (0x00420000)

WNNC_NET_GOOGLE (0x00430000)

WNNC_NET_NDFS (0x00440000)

ProtocolMajorVersionWORD2+8+8リモートプロトコルのメジャーバージョンです。
ProtocolMinorVersionWORD2+10+10リモートプロトコルのマイナーバージョンです。
ProtocolRevisionWORD2+12+12リモートプロトコルのリビジョンです。
ReservedWORD2+14+140 に設定してください。このメンバーは使用しないでください。
FlagsDWORD4+16+16

リモートプロトコルに関する情報です。このメンバーには、次のフラグを 0 個以上設定できます。

意味
REMOTE_PROTOCOL_FLAG_LOOPBACK
0x1
リモートプロトコルはループバックを使用しています。
REMOTE_PROTOCOL_FLAG_OFFLINE
0x2
リモートプロトコルはオフラインキャッシュを使用しています。
REMOTE_PROTOCOL_INFO_FLAG_PERSISTENT_HANDLE
0x4
リモートプロトコルは永続ハンドルを使用しています。

Windows 7 and Windows Server 2008 R2:  このフラグは Windows 8 および Windows Server 2012 より前ではサポートされません。

REMOTE_PROTOCOL_INFO_FLAG_PRIVACY
0x8
リモートプロトコルはプライバシー保護 (暗号化) を使用しています。これは StructureVersion メンバーが 2 以上の場合にのみサポートされます。

Windows 7 and Windows Server 2008 R2:  このフラグは Windows 8 および Windows Server 2012 より前ではサポートされません。

REMOTE_PROTOCOL_INFO_FLAG_INTEGRITY
0x10
リモートプロトコルは整合性保護を使用しているため、データは署名されます。これは StructureVersion メンバーが 2 以上の場合にのみサポートされます。

Windows 7 and Windows Server 2008 R2:  このフラグは Windows 8 および Windows Server 2012 より前ではサポートされません。

REMOTE_PROTOCOL_INFO_FLAG_MUTUAL_AUTH
0x20
リモートプロトコルは Kerberos による相互認証を使用しています。これは StructureVersion メンバーが 2 以上の場合にのみサポートされます。

Windows 7 and Windows Server 2008 R2:  このフラグは Windows 8 および Windows Server 2012 より前ではサポートされません。

GenericReserved_GenericReserved_e__Struct32+20+20プロトコル共通の情報構造体です。
ProtocolSpecific_ProtocolSpecific_e__Union64+56+52プロトコル固有情報を保持する共用体(SMB等)。

構造体: _GenericReserved_e__Struct x64 32B / x86 32B

フィールドサイズx64x86説明
ReservedDWORD32+0+00 に設定してください。このメンバーは使用しないでください。

共用体: _ProtocolSpecific_e__Union x64 64B / x86 64B

フィールドサイズx64x86説明
Smb2_Smb2_e__Struct8/4+0+0
ReservedDWORD64+0+00 に設定してください。このメンバーは使用しないでください。

公式ドキュメント

ファイルのリモートプロトコル情報を格納します。この構造体は、FileInformationClass パラメーターに FileRemoteProtocolInfo を渡したときに GetFileInformationByHandleEx 関数から返されます。

解説(Remarks)

FILE_REMOTE_PROTOCOL_INFO 構造体は、GetFileInformationByHandleEx 関数で使用する場合にのみ有効です。

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

各言語での定義

#include <windows.h>

// FILE_REMOTE_PROTOCOL_INFO  (x64 120 / x86 116 バイト)
typedef struct FILE_REMOTE_PROTOCOL_INFO {
    WORD StructureVersion;
    WORD StructureSize;
    DWORD Protocol;
    WORD ProtocolMajorVersion;
    WORD ProtocolMinorVersion;
    WORD ProtocolRevision;
    WORD Reserved;
    DWORD Flags;
    _GenericReserved_e__Struct GenericReserved;
    _ProtocolSpecific_e__Union ProtocolSpecific;
} FILE_REMOTE_PROTOCOL_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILE_REMOTE_PROTOCOL_INFO
{
    public ushort StructureVersion;
    public ushort StructureSize;
    public uint Protocol;
    public ushort ProtocolMajorVersion;
    public ushort ProtocolMinorVersion;
    public ushort ProtocolRevision;
    public ushort Reserved;
    public uint Flags;
    public _GenericReserved_e__Struct GenericReserved;
    public _ProtocolSpecific_e__Union ProtocolSpecific;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILE_REMOTE_PROTOCOL_INFO
    Public StructureVersion As UShort
    Public StructureSize As UShort
    Public Protocol As UInteger
    Public ProtocolMajorVersion As UShort
    Public ProtocolMinorVersion As UShort
    Public ProtocolRevision As UShort
    Public Reserved As UShort
    Public Flags As UInteger
    Public GenericReserved As _GenericReserved_e__Struct
    Public ProtocolSpecific As _ProtocolSpecific_e__Union
End Structure
import ctypes
from ctypes import wintypes

class FILE_REMOTE_PROTOCOL_INFO(ctypes.Structure):
    _fields_ = [
        ("StructureVersion", ctypes.c_ushort),
        ("StructureSize", ctypes.c_ushort),
        ("Protocol", wintypes.DWORD),
        ("ProtocolMajorVersion", ctypes.c_ushort),
        ("ProtocolMinorVersion", ctypes.c_ushort),
        ("ProtocolRevision", ctypes.c_ushort),
        ("Reserved", ctypes.c_ushort),
        ("Flags", wintypes.DWORD),
        ("GenericReserved", _GenericReserved_e__Struct),
        ("ProtocolSpecific", _ProtocolSpecific_e__Union),
    ]
#[repr(C)]
pub struct FILE_REMOTE_PROTOCOL_INFO {
    pub StructureVersion: u16,
    pub StructureSize: u16,
    pub Protocol: u32,
    pub ProtocolMajorVersion: u16,
    pub ProtocolMinorVersion: u16,
    pub ProtocolRevision: u16,
    pub Reserved: u16,
    pub Flags: u32,
    pub GenericReserved: _GenericReserved_e__Struct,
    pub ProtocolSpecific: _ProtocolSpecific_e__Union,
}
import "golang.org/x/sys/windows"

type FILE_REMOTE_PROTOCOL_INFO struct {
	StructureVersion uint16
	StructureSize uint16
	Protocol uint32
	ProtocolMajorVersion uint16
	ProtocolMinorVersion uint16
	ProtocolRevision uint16
	Reserved uint16
	Flags uint32
	GenericReserved _GenericReserved_e__Struct
	ProtocolSpecific _ProtocolSpecific_e__Union
}
type
  FILE_REMOTE_PROTOCOL_INFO = record
    StructureVersion: Word;
    StructureSize: Word;
    Protocol: DWORD;
    ProtocolMajorVersion: Word;
    ProtocolMinorVersion: Word;
    ProtocolRevision: Word;
    Reserved: Word;
    Flags: DWORD;
    GenericReserved: _GenericReserved_e__Struct;
    ProtocolSpecific: _ProtocolSpecific_e__Union;
  end;
const FILE_REMOTE_PROTOCOL_INFO = extern struct {
    StructureVersion: u16,
    StructureSize: u16,
    Protocol: u32,
    ProtocolMajorVersion: u16,
    ProtocolMinorVersion: u16,
    ProtocolRevision: u16,
    Reserved: u16,
    Flags: u32,
    GenericReserved: _GenericReserved_e__Struct,
    ProtocolSpecific: _ProtocolSpecific_e__Union,
};
type
  FILE_REMOTE_PROTOCOL_INFO {.bycopy.} = object
    StructureVersion: uint16
    StructureSize: uint16
    Protocol: uint32
    ProtocolMajorVersion: uint16
    ProtocolMinorVersion: uint16
    ProtocolRevision: uint16
    Reserved: uint16
    Flags: uint32
    GenericReserved: _GenericReserved_e__Struct
    ProtocolSpecific: _ProtocolSpecific_e__Union
struct FILE_REMOTE_PROTOCOL_INFO
{
    ushort StructureVersion;
    ushort StructureSize;
    uint Protocol;
    ushort ProtocolMajorVersion;
    ushort ProtocolMinorVersion;
    ushort ProtocolRevision;
    ushort Reserved;
    uint Flags;
    _GenericReserved_e__Struct GenericReserved;
    _ProtocolSpecific_e__Union ProtocolSpecific;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FILE_REMOTE_PROTOCOL_INFO サイズ: 116 バイト(x86)
dim st, 29    ; 4byte整数×29(構造体サイズ 116 / 4 切り上げ)
; StructureVersion : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; StructureSize : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; Protocol : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ProtocolMajorVersion : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; ProtocolMinorVersion : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ProtocolRevision : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; Reserved : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; Flags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; GenericReserved : _GenericReserved_e__Struct (+20, 32byte)  varptr(st)+20 を基点に操作(32byte:入れ子/配列)
; ProtocolSpecific : _ProtocolSpecific_e__Union (+52, 64byte)  varptr(st)+52 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FILE_REMOTE_PROTOCOL_INFO サイズ: 120 バイト(x64)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; StructureVersion : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; StructureSize : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; Protocol : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ProtocolMajorVersion : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; ProtocolMinorVersion : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ProtocolRevision : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; Reserved : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; Flags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; GenericReserved : _GenericReserved_e__Struct (+20, 32byte)  varptr(st)+20 を基点に操作(32byte:入れ子/配列)
; ProtocolSpecific : _ProtocolSpecific_e__Union (+56, 64byte)  varptr(st)+56 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global FILE_REMOTE_PROTOCOL_INFO
    #field short StructureVersion
    #field short StructureSize
    #field int Protocol
    #field short ProtocolMajorVersion
    #field short ProtocolMinorVersion
    #field short ProtocolRevision
    #field short Reserved
    #field int Flags
    #field _GenericReserved_e__Struct GenericReserved
    #field byte ProtocolSpecific 64
#endstruct

stdim st, FILE_REMOTE_PROTOCOL_INFO        ; NSTRUCT 変数を確保
st->StructureVersion = 100
mes "StructureVersion=" + st->StructureVersion
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。