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

URLCACHE_ENTRY_INFO

構造体
サイズx64: 104 バイト / x86: 76 バイト

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

フィールド

フィールドサイズx64x86説明
pwszSourceUrlNameLPWSTR8/4+0+0キャッシュ元となるソースURL文字列である。
pwszLocalFileNameLPWSTR8/4+8+4キャッシュされたローカルファイルのパス文字列である。
dwCacheEntryTypeDWORD4+16+8キャッシュエントリの種類を示すフラグである。
dwUseCountDWORD4+20+12このエントリの現在の参照使用回数である。
dwHitRateDWORD4+24+16このエントリへのヒット(アクセス)回数である。
dwSizeLowDWORD4+28+20エントリサイズの下位32ビット値である。
dwSizeHighDWORD4+32+24エントリサイズの上位32ビット値である。
ftLastModifiedTimeFILETIME8+36+28ソースリソースの最終更新時刻を示すFILETIMEである。
ftExpireTimeFILETIME8+44+36エントリの有効期限を示すFILETIMEである。
ftLastAccessTimeFILETIME8+52+44最終アクセス時刻を示すFILETIMEである。
ftLastSyncTimeFILETIME8+60+52サーバとの最終同期時刻を示すFILETIMEである。
pbHeaderInfoBYTE*8/4+72+60格納されたHTTPヘッダ情報のバッファへのポインタである。
cbHeaderInfoSizeDWORD4+80+64pbHeaderInfoのサイズをバイト単位で示す。
pbExtraDataBYTE*8/4+88+68追加データのバッファへのポインタである。NULL可。
cbExtraDataSizeDWORD4+96+72pbExtraDataのサイズをバイト単位で示す。

各言語での定義

#include <windows.h>

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// URLCACHE_ENTRY_INFO  (x64 104 / x86 76 バイト)
typedef struct URLCACHE_ENTRY_INFO {
    LPWSTR pwszSourceUrlName;
    LPWSTR pwszLocalFileName;
    DWORD dwCacheEntryType;
    DWORD dwUseCount;
    DWORD dwHitRate;
    DWORD dwSizeLow;
    DWORD dwSizeHigh;
    FILETIME ftLastModifiedTime;
    FILETIME ftExpireTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastSyncTime;
    BYTE* pbHeaderInfo;
    DWORD cbHeaderInfoSize;
    BYTE* pbExtraData;
    DWORD cbExtraDataSize;
} URLCACHE_ENTRY_INFO;
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 URLCACHE_ENTRY_INFO
{
    public IntPtr pwszSourceUrlName;
    public IntPtr pwszLocalFileName;
    public uint dwCacheEntryType;
    public uint dwUseCount;
    public uint dwHitRate;
    public uint dwSizeLow;
    public uint dwSizeHigh;
    public FILETIME ftLastModifiedTime;
    public FILETIME ftExpireTime;
    public FILETIME ftLastAccessTime;
    public FILETIME ftLastSyncTime;
    public IntPtr pbHeaderInfo;
    public uint cbHeaderInfoSize;
    public IntPtr pbExtraData;
    public uint cbExtraDataSize;
}
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 URLCACHE_ENTRY_INFO
    Public pwszSourceUrlName As IntPtr
    Public pwszLocalFileName As IntPtr
    Public dwCacheEntryType As UInteger
    Public dwUseCount As UInteger
    Public dwHitRate As UInteger
    Public dwSizeLow As UInteger
    Public dwSizeHigh As UInteger
    Public ftLastModifiedTime As FILETIME
    Public ftExpireTime As FILETIME
    Public ftLastAccessTime As FILETIME
    Public ftLastSyncTime As FILETIME
    Public pbHeaderInfo As IntPtr
    Public cbHeaderInfoSize As UInteger
    Public pbExtraData As IntPtr
    Public cbExtraDataSize As UInteger
End Structure
import ctypes
from ctypes import wintypes

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class URLCACHE_ENTRY_INFO(ctypes.Structure):
    _fields_ = [
        ("pwszSourceUrlName", ctypes.c_void_p),
        ("pwszLocalFileName", ctypes.c_void_p),
        ("dwCacheEntryType", wintypes.DWORD),
        ("dwUseCount", wintypes.DWORD),
        ("dwHitRate", wintypes.DWORD),
        ("dwSizeLow", wintypes.DWORD),
        ("dwSizeHigh", wintypes.DWORD),
        ("ftLastModifiedTime", FILETIME),
        ("ftExpireTime", FILETIME),
        ("ftLastAccessTime", FILETIME),
        ("ftLastSyncTime", FILETIME),
        ("pbHeaderInfo", ctypes.c_void_p),
        ("cbHeaderInfoSize", wintypes.DWORD),
        ("pbExtraData", ctypes.c_void_p),
        ("cbExtraDataSize", wintypes.DWORD),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct URLCACHE_ENTRY_INFO {
    pub pwszSourceUrlName: *mut core::ffi::c_void,
    pub pwszLocalFileName: *mut core::ffi::c_void,
    pub dwCacheEntryType: u32,
    pub dwUseCount: u32,
    pub dwHitRate: u32,
    pub dwSizeLow: u32,
    pub dwSizeHigh: u32,
    pub ftLastModifiedTime: FILETIME,
    pub ftExpireTime: FILETIME,
    pub ftLastAccessTime: FILETIME,
    pub ftLastSyncTime: FILETIME,
    pub pbHeaderInfo: *mut core::ffi::c_void,
    pub cbHeaderInfoSize: u32,
    pub pbExtraData: *mut core::ffi::c_void,
    pub cbExtraDataSize: u32,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type URLCACHE_ENTRY_INFO struct {
	pwszSourceUrlName uintptr
	pwszLocalFileName uintptr
	dwCacheEntryType uint32
	dwUseCount uint32
	dwHitRate uint32
	dwSizeLow uint32
	dwSizeHigh uint32
	ftLastModifiedTime FILETIME
	ftExpireTime FILETIME
	ftLastAccessTime FILETIME
	ftLastSyncTime FILETIME
	pbHeaderInfo uintptr
	cbHeaderInfoSize uint32
	pbExtraData uintptr
	cbExtraDataSize uint32
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  URLCACHE_ENTRY_INFO = record
    pwszSourceUrlName: Pointer;
    pwszLocalFileName: Pointer;
    dwCacheEntryType: DWORD;
    dwUseCount: DWORD;
    dwHitRate: DWORD;
    dwSizeLow: DWORD;
    dwSizeHigh: DWORD;
    ftLastModifiedTime: FILETIME;
    ftExpireTime: FILETIME;
    ftLastAccessTime: FILETIME;
    ftLastSyncTime: FILETIME;
    pbHeaderInfo: Pointer;
    cbHeaderInfoSize: DWORD;
    pbExtraData: Pointer;
    cbExtraDataSize: DWORD;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const URLCACHE_ENTRY_INFO = extern struct {
    pwszSourceUrlName: ?*anyopaque,
    pwszLocalFileName: ?*anyopaque,
    dwCacheEntryType: u32,
    dwUseCount: u32,
    dwHitRate: u32,
    dwSizeLow: u32,
    dwSizeHigh: u32,
    ftLastModifiedTime: FILETIME,
    ftExpireTime: FILETIME,
    ftLastAccessTime: FILETIME,
    ftLastSyncTime: FILETIME,
    pbHeaderInfo: ?*anyopaque,
    cbHeaderInfoSize: u32,
    pbExtraData: ?*anyopaque,
    cbExtraDataSize: u32,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  URLCACHE_ENTRY_INFO {.bycopy.} = object
    pwszSourceUrlName: pointer
    pwszLocalFileName: pointer
    dwCacheEntryType: uint32
    dwUseCount: uint32
    dwHitRate: uint32
    dwSizeLow: uint32
    dwSizeHigh: uint32
    ftLastModifiedTime: FILETIME
    ftExpireTime: FILETIME
    ftLastAccessTime: FILETIME
    ftLastSyncTime: FILETIME
    pbHeaderInfo: pointer
    cbHeaderInfoSize: uint32
    pbExtraData: pointer
    cbExtraDataSize: uint32
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct URLCACHE_ENTRY_INFO
{
    void* pwszSourceUrlName;
    void* pwszLocalFileName;
    uint dwCacheEntryType;
    uint dwUseCount;
    uint dwHitRate;
    uint dwSizeLow;
    uint dwSizeHigh;
    FILETIME ftLastModifiedTime;
    FILETIME ftExpireTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastSyncTime;
    void* pbHeaderInfo;
    uint cbHeaderInfoSize;
    void* pbExtraData;
    uint cbExtraDataSize;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; URLCACHE_ENTRY_INFO サイズ: 76 バイト(x86)
dim st, 19    ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; pwszSourceUrlName : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pwszLocalFileName : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwCacheEntryType : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwUseCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwHitRate : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwSizeLow : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ftLastModifiedTime : FILETIME (+28, 8byte)  varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; ftExpireTime : FILETIME (+36, 8byte)  varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; ftLastAccessTime : FILETIME (+44, 8byte)  varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; ftLastSyncTime : FILETIME (+52, 8byte)  varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; pbHeaderInfo : BYTE* (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; cbHeaderInfoSize : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pbExtraData : BYTE* (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; cbExtraDataSize : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; URLCACHE_ENTRY_INFO サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; pwszSourceUrlName : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pwszLocalFileName : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwCacheEntryType : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwUseCount : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwHitRate : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwSizeLow : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwSizeHigh : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ftLastModifiedTime : FILETIME (+36, 8byte)  varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; ftExpireTime : FILETIME (+44, 8byte)  varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; ftLastAccessTime : FILETIME (+52, 8byte)  varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; ftLastSyncTime : FILETIME (+60, 8byte)  varptr(st)+60 を基点に操作(8byte:入れ子/配列)
; pbHeaderInfo : BYTE* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; cbHeaderInfoSize : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; pbExtraData : BYTE* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; cbExtraDataSize : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ※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 URLCACHE_ENTRY_INFO
    #field intptr pwszSourceUrlName
    #field intptr pwszLocalFileName
    #field int dwCacheEntryType
    #field int dwUseCount
    #field int dwHitRate
    #field int dwSizeLow
    #field int dwSizeHigh
    #field FILETIME ftLastModifiedTime
    #field FILETIME ftExpireTime
    #field FILETIME ftLastAccessTime
    #field FILETIME ftLastSyncTime
    #field intptr pbHeaderInfo
    #field int cbHeaderInfoSize
    #field intptr pbExtraData
    #field int cbExtraDataSize
#endstruct

stdim st, URLCACHE_ENTRY_INFO        ; NSTRUCT 変数を確保
st->dwCacheEntryType = 100
mes "dwCacheEntryType=" + st->dwCacheEntryType