Win32 API 日本語リファレンス
ホームNetworking.WinInet › INTERNET_CACHE_ENTRY_INFOA

INTERNET_CACHE_ENTRY_INFOA

構造体
サイズx64: 112 バイト / x86: 80 バイト

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

フィールド

フィールドサイズx64x86説明
dwStructSizeDWORD4+0+0この構造体のバイト数(可変長部含む)。バッファサイズ確認に用いる。
lpszSourceUrlNameLPSTR8/4+8+4キャッシュ元のソースURL文字列(ANSI)へのポインタ。
lpszLocalFileNameLPSTR8/4+16+8キャッシュされたローカルファイルのパス文字列(ANSI)へのポインタ。NULL可。
CacheEntryTypeDWORD4+24+12キャッシュエントリの種別を示すフラグビット(通常・Cookie・履歴等)。
dwUseCountDWORD4+28+16このエントリの現在の使用カウント(参照数)。
dwHitRateDWORD4+32+20このエントリの取得回数(ヒット数)。
dwSizeLowDWORD4+36+24キャッシュエントリのサイズの下位32ビット(バイト)。
dwSizeHighDWORD4+40+28キャッシュエントリのサイズの上位32ビット(バイト)。
LastModifiedTimeFILETIME8+44+32コンテンツの最終更新日時(FILETIME)。
ExpireTimeFILETIME8+52+40コンテンツの有効期限日時(FILETIME)。
LastAccessTimeFILETIME8+60+48最終アクセス日時(FILETIME)。
LastSyncTimeFILETIME8+68+56サーバーとの最終同期日時(FILETIME)。
lpHeaderInfoLPSTR8/4+80+64保存されたHTTPヘッダー情報文字列(ANSI)へのポインタ。NULL可。
dwHeaderInfoSizeDWORD4+88+68lpHeaderInfoのサイズ(バイト)。
lpszFileExtensionLPSTR8/4+96+72ローカルキャッシュファイルの拡張子文字列(ANSI)へのポインタ。NULL可。
Anonymous_Anonymous_e__Union4+104+76用途別の追加情報を保持する無名共用体。終了時刻またはイメージ種別を格納する。

共用体: _Anonymous_e__Union x64 4B / x86 4B

フィールドサイズx64x86
dwReservedDWORD4+0+0
dwExemptDeltaDWORD4+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 Structure
import 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__Union
struct 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 非対応)。必要に応じ手動でアクセス。