Win32 API 日本語リファレンス
ホームSecurity.Cryptography › CRYPTNET_URL_CACHE_RESPONSE_INFO

CRYPTNET_URL_CACHE_RESPONSE_INFO

構造体
サイズx64: 40 バイト / x86: 28 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズ (バイト単位)。
wResponseTypeWORD2+4+4

キャッシュエントリが HTTP 応答情報を格納しているかどうかを示す値です。

意味
CRYPTNET_URL_CACHE_RESPONSE_NONE
0
キャッシュエントリは応答情報を格納していません。
CRYPTNET_URL_CACHE_RESPONSE_HTTP
1
キャッシュエントリは HTTP 応答ヘッダーから導出された応答情報を格納しています。
wResponseFlagsWORD2+6+6サーバーベースの証明書検証の応答オプションを制御するフラグの集合を指定する値です。
LastModifiedTimeFILETIME8+8+8URL に対するキャッシュされた HTTP 応答の Last-Modified エンティティヘッダーフィールドの値を指定する FILETIME 構造体です。
dwMaxAgeDWORD4+16+16URL に対するキャッシュされた HTTP 応答の Cache-Control ヘッダーに含まれる max-age ディレクティブの秒数を指定する値です。
pwszETagLPWSTR8/4+24+20URL に対するキャッシュされた HTTP 応答の ETag 応答ヘッダーフィールドの値を格納する文字列へのポインターです。
dwProxyIdDWORD4+32+24HTTP 応答ヘッダーの値 ViaETagLast-Modified が存在する場合に、それらの MD5 ハッシュを格納する値です。

公式ドキュメント

CRYPTNET_URL_CACHE_RESPONSE_INFO 構造体は、Cryptnet URL キャッシュ (CUC) サービスが URL キャッシュエントリを保持するために使用する応答情報を格納します。この構造体は CRYPT_RETRIEVE_AUX_INFO 構造体の pResponseInfo メンバーを構成します。この構造体は CryptRetrieveObjectByUrlpAuxInfo パラメーターとして渡されます。

解説(Remarks)

HTTP 応答ヘッダーで指定されていない場合、キャッシュサービスは LastModifiedTimedwMaxAgepwszETagdwProxyId の各メンバーの値を 0 に設定します。

キャッシュサービスは pwszETag メンバーに強い (strong) ETag のみを許可します。

応答が有効かどうかを判断するために、キャッシュサービスは wResponseFlags メンバーと Wincrypt.h で定義されている次の定数とのビット単位の AND を実行します。結果が TRUE の場合、その応答は有効です。

名前
CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

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

// CRYPTNET_URL_CACHE_RESPONSE_INFO  (x64 40 / x86 28 バイト)
typedef struct CRYPTNET_URL_CACHE_RESPONSE_INFO {
    DWORD cbSize;
    WORD wResponseType;
    WORD wResponseFlags;
    FILETIME LastModifiedTime;
    DWORD dwMaxAge;
    LPWSTR pwszETag;
    DWORD dwProxyId;
} CRYPTNET_URL_CACHE_RESPONSE_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 CRYPTNET_URL_CACHE_RESPONSE_INFO
{
    public uint cbSize;
    public ushort wResponseType;
    public ushort wResponseFlags;
    public FILETIME LastModifiedTime;
    public uint dwMaxAge;
    public IntPtr pwszETag;
    public uint dwProxyId;
}
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 CRYPTNET_URL_CACHE_RESPONSE_INFO
    Public cbSize As UInteger
    Public wResponseType As UShort
    Public wResponseFlags As UShort
    Public LastModifiedTime As FILETIME
    Public dwMaxAge As UInteger
    Public pwszETag As IntPtr
    Public dwProxyId As UInteger
End Structure
import ctypes
from ctypes import wintypes

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

class CRYPTNET_URL_CACHE_RESPONSE_INFO(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("wResponseType", ctypes.c_ushort),
        ("wResponseFlags", ctypes.c_ushort),
        ("LastModifiedTime", FILETIME),
        ("dwMaxAge", wintypes.DWORD),
        ("pwszETag", ctypes.c_void_p),
        ("dwProxyId", wintypes.DWORD),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct CRYPTNET_URL_CACHE_RESPONSE_INFO {
    pub cbSize: u32,
    pub wResponseType: u16,
    pub wResponseFlags: u16,
    pub LastModifiedTime: FILETIME,
    pub dwMaxAge: u32,
    pub pwszETag: *mut core::ffi::c_void,
    pub dwProxyId: u32,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type CRYPTNET_URL_CACHE_RESPONSE_INFO struct {
	cbSize uint32
	wResponseType uint16
	wResponseFlags uint16
	LastModifiedTime FILETIME
	dwMaxAge uint32
	pwszETag uintptr
	dwProxyId uint32
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  CRYPTNET_URL_CACHE_RESPONSE_INFO = record
    cbSize: DWORD;
    wResponseType: Word;
    wResponseFlags: Word;
    LastModifiedTime: FILETIME;
    dwMaxAge: DWORD;
    pwszETag: Pointer;
    dwProxyId: DWORD;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const CRYPTNET_URL_CACHE_RESPONSE_INFO = extern struct {
    cbSize: u32,
    wResponseType: u16,
    wResponseFlags: u16,
    LastModifiedTime: FILETIME,
    dwMaxAge: u32,
    pwszETag: ?*anyopaque,
    dwProxyId: u32,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  CRYPTNET_URL_CACHE_RESPONSE_INFO {.bycopy.} = object
    cbSize: uint32
    wResponseType: uint16
    wResponseFlags: uint16
    LastModifiedTime: FILETIME
    dwMaxAge: uint32
    pwszETag: pointer
    dwProxyId: uint32
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct CRYPTNET_URL_CACHE_RESPONSE_INFO
{
    uint cbSize;
    ushort wResponseType;
    ushort wResponseFlags;
    FILETIME LastModifiedTime;
    uint dwMaxAge;
    void* pwszETag;
    uint dwProxyId;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CRYPTNET_URL_CACHE_RESPONSE_INFO サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; wResponseType : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wResponseFlags : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; LastModifiedTime : FILETIME (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwMaxAge : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pwszETag : LPWSTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwProxyId : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CRYPTNET_URL_CACHE_RESPONSE_INFO サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; wResponseType : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wResponseFlags : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; LastModifiedTime : FILETIME (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwMaxAge : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pwszETag : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; dwProxyId : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (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 CRYPTNET_URL_CACHE_RESPONSE_INFO
    #field int cbSize
    #field short wResponseType
    #field short wResponseFlags
    #field FILETIME LastModifiedTime
    #field int dwMaxAge
    #field intptr pwszETag
    #field int dwProxyId
#endstruct

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