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 名を含む NULL 終端文字列へのポインター。この文字列は、この構造体の末尾のメモリ領域に配置されます。 | ||||||||||||||||||||
| lpszLocalFileName | LPSTR | 8/4 | +16 | +8 | ローカルファイル名を含む NULL 終端文字列へのポインター。この文字列は、この構造体の末尾のメモリ領域に配置されます。 | ||||||||||||||||||||
| CacheEntryType | DWORD | 4 | +24 | +12 | キャッシュエントリの種類とそのプロパティを示すビットマスクです。キャッシュエントリの種類には、履歴エントリ (URLHISTORY_CACHE_ENTRY)、Cookie エントリ (COOKIE_CACHE_ENTRY)、通常のキャッシュコンテンツ (NORMAL_CACHE_ENTRY) があります。 このメンバーには、以下のプロパティフラグおよび後述のキャッシュ種類フラグを 0 個以上指定できます。
次の一覧はキャッシュ種類フラグです。
| ||||||||||||||||||||
| dwUseCount | DWORD | 4 | +28 | +16 | このキャッシュエントリを使用している WinINet 呼び出し元の現在の数。 | ||||||||||||||||||||
| dwHitRate | DWORD | 4 | +32 | +20 | このキャッシュエントリが取得された回数。 | ||||||||||||||||||||
| dwSizeLow | DWORD | 4 | +36 | +24 | ファイルサイズの下位部分 (バイト単位)。 | ||||||||||||||||||||
| dwSizeHigh | DWORD | 4 | +40 | +28 | ファイルサイズの上位部分 (バイト単位)。 | ||||||||||||||||||||
| LastModifiedTime | FILETIME | 8 | +44 | +32 | この URL の最終更新日時をグリニッジ標準時形式で格納する 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 | ヘッダー情報を格納するバッファーへのポインター。このバッファーは、この構造体の末尾のメモリ領域に配置されます。 | ||||||||||||||||||||
| dwHeaderInfoSize | DWORD | 4 | +88 | +68 | lpHeaderInfo バッファーのサイズ (TCHARs 単位)。 | ||||||||||||||||||||
| lpszFileExtension | LPSTR | 8/4 | +96 | +72 | データをファイルとして取得する際に使用されるファイル名拡張子を含む文字列へのポインター。この文字列は、この構造体の末尾のメモリ領域に配置されます。 | ||||||||||||||||||||
| 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 | 最終アクセス日時からの除外時間 (秒単位)。 |
公式ドキュメント
インターネットキャッシュ内のエントリに関する情報を格納します。
解説(Remarks)
キャッシュエントリのサイズに上限はないため、キャッシュを列挙する必要があるアプリケーションは、可変サイズのバッファーを割り当てられるようにしておく必要があります。詳細については、 Using Buffers を参照してください。
wininet.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて ANSI 版または Unicode 版を自動的に選択するエイリアスとして INTERNET_CACHE_ENTRY_INFO を定義しています。エンコーディングに依存しないエイリアスと、エンコーディングに依存するコードを混在させると、不一致が生じてコンパイルエラーや実行時エラーの原因となることがあります。詳細については、Conventions for Function Prototypes を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 非対応)。必要に応じ手動でアクセス。