BG_FILE_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| RemoteName | LPWSTR | 8/4 | +0 | +0 | サーバー上のファイルの名前を格納する null 終端文字列です (例: http://<server>/<path>/file.ext)。名前の形式は、使用する転送プロトコルに準拠していなければなりません。パスやファイル名にワイルドカードは使用できません。URL には正当な URL 文字のみを含める必要があり、エスケープ処理は行われません。URL は null 終端文字を含めずに 2,200 文字までに制限されます。 URL の各セグメントは MAX_PATH 文字までに制限されます。 ダウンロードまたはアップロードするファイルのリモート名は SMB で表現できます。ただし、アップロード応答 (upload-reply) ジョブでは SMB はサポートされません。リモート名は、UNC パスや、ネットワークドライブを含むフルパスとして指定するか、"file://" プレフィックスを使用して指定できます。BITS 1.5 以前: RemoteName での SMB プロトコルはサポートされません。 |
| LocalName | LPWSTR | 8/4 | +8 | +4 | クライアント上のファイルの名前を格納する null 終端文字列です。ファイル名にはフルパスを含めなければなりません (例: d:\myapp\updates\file.ext)。パスやファイル名にワイルドカードは使用できず、パスに含まれるディレクトリは存在している必要があります。パスは null 終端文字を含めずに MAX_PATH までに制限されます。 ダウンロード、およびアップロード応答ジョブの応答部分については、ユーザーがローカルディレクトリへの書き込み権限を持っていなければなりません。BITS は NTFS ストリームをサポートしません。セッション固有であるネットワークドライブを使用する代わりに、UNC パス (例: \server\share\path\file) を使用してください。パスに \? プレフィックスを含めないでください。 |
公式ドキュメント
転送するファイルのローカル名とリモート名を提供します。
解説(Remarks)
BITS は RemoteName で HTTP、HTTPS、および SMB の各プロトコルをサポートします。HTTP の要件については、BITS ダウンロードの HTTP 要件を参照してください。
BITS 1.5 以前: RemoteName での SMB プロトコルはサポートされません。
BITS がファイルのタイムスタンプを引き継ぐかどうかは、次のとおりです。
- HTTP ダウンロードの場合、BITS はファイルの更新タイムスタンプを引き継ぎ、ファイルの作成時刻を更新時刻に設定します。
- HTTP アップロードの場合、BITS はファイルのタイムスタンプを引き継ぎません。
- SMB のダウンロードおよびアップロードの場合、BITS はファイルのタイムスタンプを引き継ぎます。
HTTP のアップロードジョブおよびアップロード応答ジョブで、URL のパスとファイル名の部分に、クライアントとサーバーの両方のコードページに共通しない Unicode 文字が含まれている場合、サーバー側での URL 変換が失敗し、BITS ジョブはエラー状態になります。 URL のサーバー部分に Unicode 文字が含まれる場合は、国際化ドメイン名 (IDN) を使用してサーバー部分をエンコードする必要があります。
BITS は HTTP を使用してダウンロードできるファイルのサイズを制限しません。アップロードの制限については、BITSMaximumUploadSize IIS 拡張プロパティを参照してください。
IIS 5.0: ダウンロードは 4 GB までに制限されます。
BITS 1.2 以前: HTTP ダウンロードの場合、転送できる最大ファイルサイズは 4 GB です。BITS は 4 GB を超えるファイルの転送が成功することを保証できません。URL に US-ASCII 文字セットに含まれない Unicode 文字が含まれる場合は、リモートファイル名として BITS に渡す前に、その Unicode 文字列を UTF-8 でエンコードしてください。文字列をエンコードしないと、HTTP サーバーが不正な URL を受け取り、ジョブがエラー状態になる可能性があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// BG_FILE_INFO (x64 16 / x86 8 バイト)
typedef struct BG_FILE_INFO {
LPWSTR RemoteName;
LPWSTR LocalName;
} BG_FILE_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BG_FILE_INFO
{
public IntPtr RemoteName;
public IntPtr LocalName;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure BG_FILE_INFO
Public RemoteName As IntPtr
Public LocalName As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class BG_FILE_INFO(ctypes.Structure):
_fields_ = [
("RemoteName", ctypes.c_void_p),
("LocalName", ctypes.c_void_p),
]#[repr(C)]
pub struct BG_FILE_INFO {
pub RemoteName: *mut core::ffi::c_void,
pub LocalName: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type BG_FILE_INFO struct {
RemoteName uintptr
LocalName uintptr
}type
BG_FILE_INFO = record
RemoteName: Pointer;
LocalName: Pointer;
end;const BG_FILE_INFO = extern struct {
RemoteName: ?*anyopaque,
LocalName: ?*anyopaque,
};type
BG_FILE_INFO {.bycopy.} = object
RemoteName: pointer
LocalName: pointerstruct BG_FILE_INFO
{
void* RemoteName;
void* LocalName;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; BG_FILE_INFO サイズ: 8 バイト(x86)
dim st, 2 ; 4byte整数×2(構造体サイズ 8 / 4 切り上げ)
; RemoteName : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; LocalName : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; BG_FILE_INFO サイズ: 16 バイト(x64)
dim st, 4 ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; RemoteName : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; LocalName : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global BG_FILE_INFO
#field intptr RemoteName
#field intptr LocalName
#endstruct
stdim st, BG_FILE_INFO ; NSTRUCT 変数を確保