ホーム › Networking.WinInet › INTERNET_CACHE_ENTRY_INFOA
INTERNET_CACHE_ENTRY_INFOA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwStructSize | DWORD | 4 | +0 | +0 | この構造体のバイト数(可変長部含む)。バッファサイズ確認に用いる。 |
| lpszSourceUrlName | LPSTR | 8/4 | +8 | +4 | キャッシュ元のソースURL文字列(ANSI)へのポインタ。 |
| lpszLocalFileName | LPSTR | 8/4 | +16 | +8 | キャッシュされたローカルファイルのパス文字列(ANSI)へのポインタ。NULL可。 |
| CacheEntryType | DWORD | 4 | +24 | +12 | キャッシュエントリの種別を示すフラグビット(通常・Cookie・履歴等)。 |
| dwUseCount | DWORD | 4 | +28 | +16 | このエントリの現在の使用カウント(参照数)。 |
| dwHitRate | DWORD | 4 | +32 | +20 | このエントリの取得回数(ヒット数)。 |
| dwSizeLow | DWORD | 4 | +36 | +24 | キャッシュエントリのサイズの下位32ビット(バイト)。 |
| dwSizeHigh | DWORD | 4 | +40 | +28 | キャッシュエントリのサイズの上位32ビット(バイト)。 |
| LastModifiedTime | FILETIME | 8 | +44 | +32 | コンテンツの最終更新日時(FILETIME)。 |
| ExpireTime | FILETIME | 8 | +52 | +40 | コンテンツの有効期限日時(FILETIME)。 |
| LastAccessTime | FILETIME | 8 | +60 | +48 | 最終アクセス日時(FILETIME)。 |
| LastSyncTime | FILETIME | 8 | +68 | +56 | サーバーとの最終同期日時(FILETIME)。 |
| lpHeaderInfo | LPSTR | 8/4 | +80 | +64 | 保存されたHTTPヘッダー情報文字列(ANSI)へのポインタ。NULL可。 |
| dwHeaderInfoSize | DWORD | 4 | +88 | +68 | lpHeaderInfoのサイズ(バイト)。 |
| lpszFileExtension | LPSTR | 8/4 | +96 | +72 | ローカルキャッシュファイルの拡張子文字列(ANSI)へのポインタ。NULL可。 |
| Anonymous | _Anonymous_e__Union | 4 | +104 | +76 | 用途別の追加情報を保持する無名共用体。終了時刻またはイメージ種別を格納する。 |
共用体: _Anonymous_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| dwReserved | DWORD | 4 | +0 | +0 |
| dwExemptDelta | DWORD | 4 | +0 | +0 |
各言語での定義
#include <windows.h>
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// INTERNET_CACHE_ENTRY_INFOA (x64 112 / x86 80 バイト)
typedef struct INTERNET_CACHE_ENTRY_INFOA {
DWORD dwStructSize;
LPSTR lpszSourceUrlName;
LPSTR lpszLocalFileName;
DWORD CacheEntryType;
DWORD dwUseCount;
DWORD dwHitRate;
DWORD dwSizeLow;
DWORD dwSizeHigh;
FILETIME LastModifiedTime;
FILETIME ExpireTime;
FILETIME LastAccessTime;
FILETIME LastSyncTime;
LPSTR lpHeaderInfo;
DWORD dwHeaderInfoSize;
LPSTR lpszFileExtension;
_Anonymous_e__Union Anonymous;
} INTERNET_CACHE_ENTRY_INFOA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct INTERNET_CACHE_ENTRY_INFOA
{
public uint dwStructSize;
public IntPtr lpszSourceUrlName;
public IntPtr lpszLocalFileName;
public uint CacheEntryType;
public uint dwUseCount;
public uint dwHitRate;
public uint dwSizeLow;
public uint dwSizeHigh;
public FILETIME LastModifiedTime;
public FILETIME ExpireTime;
public FILETIME LastAccessTime;
public FILETIME LastSyncTime;
public IntPtr lpHeaderInfo;
public uint dwHeaderInfoSize;
public IntPtr lpszFileExtension;
public _Anonymous_e__Union Anonymous;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure INTERNET_CACHE_ENTRY_INFOA
Public dwStructSize As UInteger
Public lpszSourceUrlName As IntPtr
Public lpszLocalFileName As IntPtr
Public CacheEntryType As UInteger
Public dwUseCount As UInteger
Public dwHitRate As UInteger
Public dwSizeLow As UInteger
Public dwSizeHigh As UInteger
Public LastModifiedTime As FILETIME
Public ExpireTime As FILETIME
Public LastAccessTime As FILETIME
Public LastSyncTime As FILETIME
Public lpHeaderInfo As IntPtr
Public dwHeaderInfoSize As UInteger
Public lpszFileExtension As IntPtr
Public Anonymous As _Anonymous_e__Union
End Structureimport ctypes
from ctypes import wintypes
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class INTERNET_CACHE_ENTRY_INFOA(ctypes.Structure):
_fields_ = [
("dwStructSize", wintypes.DWORD),
("lpszSourceUrlName", ctypes.c_void_p),
("lpszLocalFileName", ctypes.c_void_p),
("CacheEntryType", wintypes.DWORD),
("dwUseCount", wintypes.DWORD),
("dwHitRate", wintypes.DWORD),
("dwSizeLow", wintypes.DWORD),
("dwSizeHigh", wintypes.DWORD),
("LastModifiedTime", FILETIME),
("ExpireTime", FILETIME),
("LastAccessTime", FILETIME),
("LastSyncTime", FILETIME),
("lpHeaderInfo", ctypes.c_void_p),
("dwHeaderInfoSize", wintypes.DWORD),
("lpszFileExtension", ctypes.c_void_p),
("Anonymous", _Anonymous_e__Union),
]#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct INTERNET_CACHE_ENTRY_INFOA {
pub dwStructSize: u32,
pub lpszSourceUrlName: *mut core::ffi::c_void,
pub lpszLocalFileName: *mut core::ffi::c_void,
pub CacheEntryType: u32,
pub dwUseCount: u32,
pub dwHitRate: u32,
pub dwSizeLow: u32,
pub dwSizeHigh: u32,
pub LastModifiedTime: FILETIME,
pub ExpireTime: FILETIME,
pub LastAccessTime: FILETIME,
pub LastSyncTime: FILETIME,
pub lpHeaderInfo: *mut core::ffi::c_void,
pub dwHeaderInfoSize: u32,
pub lpszFileExtension: *mut core::ffi::c_void,
pub Anonymous: _Anonymous_e__Union,
}import "golang.org/x/sys/windows"
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type INTERNET_CACHE_ENTRY_INFOA struct {
dwStructSize uint32
lpszSourceUrlName uintptr
lpszLocalFileName uintptr
CacheEntryType uint32
dwUseCount uint32
dwHitRate uint32
dwSizeLow uint32
dwSizeHigh uint32
LastModifiedTime FILETIME
ExpireTime FILETIME
LastAccessTime FILETIME
LastSyncTime FILETIME
lpHeaderInfo uintptr
dwHeaderInfoSize uint32
lpszFileExtension uintptr
Anonymous _Anonymous_e__Union
}type
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
INTERNET_CACHE_ENTRY_INFOA = record
dwStructSize: DWORD;
lpszSourceUrlName: Pointer;
lpszLocalFileName: Pointer;
CacheEntryType: DWORD;
dwUseCount: DWORD;
dwHitRate: DWORD;
dwSizeLow: DWORD;
dwSizeHigh: DWORD;
LastModifiedTime: FILETIME;
ExpireTime: FILETIME;
LastAccessTime: FILETIME;
LastSyncTime: FILETIME;
lpHeaderInfo: Pointer;
dwHeaderInfoSize: DWORD;
lpszFileExtension: Pointer;
Anonymous: _Anonymous_e__Union;
end;const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const INTERNET_CACHE_ENTRY_INFOA = extern struct {
dwStructSize: u32,
lpszSourceUrlName: ?*anyopaque,
lpszLocalFileName: ?*anyopaque,
CacheEntryType: u32,
dwUseCount: u32,
dwHitRate: u32,
dwSizeLow: u32,
dwSizeHigh: u32,
LastModifiedTime: FILETIME,
ExpireTime: FILETIME,
LastAccessTime: FILETIME,
LastSyncTime: FILETIME,
lpHeaderInfo: ?*anyopaque,
dwHeaderInfoSize: u32,
lpszFileExtension: ?*anyopaque,
Anonymous: _Anonymous_e__Union,
};type
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
INTERNET_CACHE_ENTRY_INFOA {.bycopy.} = object
dwStructSize: uint32
lpszSourceUrlName: pointer
lpszLocalFileName: pointer
CacheEntryType: uint32
dwUseCount: uint32
dwHitRate: uint32
dwSizeLow: uint32
dwSizeHigh: uint32
LastModifiedTime: FILETIME
ExpireTime: FILETIME
LastAccessTime: FILETIME
LastSyncTime: FILETIME
lpHeaderInfo: pointer
dwHeaderInfoSize: uint32
lpszFileExtension: pointer
Anonymous: _Anonymous_e__Unionstruct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct INTERNET_CACHE_ENTRY_INFOA
{
uint dwStructSize;
void* lpszSourceUrlName;
void* lpszLocalFileName;
uint CacheEntryType;
uint dwUseCount;
uint dwHitRate;
uint dwSizeLow;
uint dwSizeHigh;
FILETIME LastModifiedTime;
FILETIME ExpireTime;
FILETIME LastAccessTime;
FILETIME LastSyncTime;
void* lpHeaderInfo;
uint dwHeaderInfoSize;
void* lpszFileExtension;
_Anonymous_e__Union Anonymous;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; INTERNET_CACHE_ENTRY_INFOA サイズ: 80 バイト(x86)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; dwStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpszSourceUrlName : LPSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; lpszLocalFileName : LPSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; CacheEntryType : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwUseCount : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwHitRate : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwSizeLow : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; LastModifiedTime : FILETIME (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ExpireTime : FILETIME (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; LastAccessTime : FILETIME (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; LastSyncTime : FILETIME (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; lpHeaderInfo : LPSTR (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; dwHeaderInfoSize : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; lpszFileExtension : LPSTR (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+76, 4byte) varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; INTERNET_CACHE_ENTRY_INFOA サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; dwStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpszSourceUrlName : LPSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpszLocalFileName : LPSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CacheEntryType : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwUseCount : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwHitRate : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwSizeLow : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; LastModifiedTime : FILETIME (+44, 8byte) varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; ExpireTime : FILETIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; LastAccessTime : FILETIME (+60, 8byte) varptr(st)+60 を基点に操作(8byte:入れ子/配列)
; LastSyncTime : FILETIME (+68, 8byte) varptr(st)+68 を基点に操作(8byte:入れ子/配列)
; lpHeaderInfo : LPSTR (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; dwHeaderInfoSize : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; lpszFileExtension : LPSTR (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; Anonymous : _Anonymous_e__Union (+104, 4byte) varptr(st)+104 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global INTERNET_CACHE_ENTRY_INFOA
#field int dwStructSize
#field intptr lpszSourceUrlName
#field intptr lpszLocalFileName
#field int CacheEntryType
#field int dwUseCount
#field int dwHitRate
#field int dwSizeLow
#field int dwSizeHigh
#field FILETIME LastModifiedTime
#field FILETIME ExpireTime
#field FILETIME LastAccessTime
#field FILETIME LastSyncTime
#field intptr lpHeaderInfo
#field int dwHeaderInfoSize
#field intptr lpszFileExtension
#field byte Anonymous 4
#endstruct
stdim st, INTERNET_CACHE_ENTRY_INFOA ; NSTRUCT 変数を確保
st->dwStructSize = 100
mes "dwStructSize=" + st->dwStructSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。