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

CERT_POLICY95_QUALIFIER1

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

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

フィールド

フィールドサイズx64x86説明
pszPracticesReferenceLPWSTR8/4+0+0実施規程への参照文字列(ワイド文字列)。
pszNoticeIdentifierLPSTR8/4+8+4通知識別子を示すOID文字列。
pszNSINoticeIdentifierLPSTR8/4+16+8NSI通知識別子を示すOID文字列。
cCPSURLsDWORD4+24+12CPS URLの個数。
rgCPSURLsCPS_URLS*8/4+32+16CPS_URLS構造体の配列へのポインタ。

各言語での定義

#include <windows.h>

// CERT_POLICY95_QUALIFIER1  (x64 40 / x86 20 バイト)
typedef struct CERT_POLICY95_QUALIFIER1 {
    LPWSTR pszPracticesReference;
    LPSTR pszNoticeIdentifier;
    LPSTR pszNSINoticeIdentifier;
    DWORD cCPSURLs;
    CPS_URLS* rgCPSURLs;
} CERT_POLICY95_QUALIFIER1;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_POLICY95_QUALIFIER1
{
    public IntPtr pszPracticesReference;
    public IntPtr pszNoticeIdentifier;
    public IntPtr pszNSINoticeIdentifier;
    public uint cCPSURLs;
    public IntPtr rgCPSURLs;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_POLICY95_QUALIFIER1
    Public pszPracticesReference As IntPtr
    Public pszNoticeIdentifier As IntPtr
    Public pszNSINoticeIdentifier As IntPtr
    Public cCPSURLs As UInteger
    Public rgCPSURLs As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class CERT_POLICY95_QUALIFIER1(ctypes.Structure):
    _fields_ = [
        ("pszPracticesReference", ctypes.c_void_p),
        ("pszNoticeIdentifier", ctypes.c_void_p),
        ("pszNSINoticeIdentifier", ctypes.c_void_p),
        ("cCPSURLs", wintypes.DWORD),
        ("rgCPSURLs", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct CERT_POLICY95_QUALIFIER1 {
    pub pszPracticesReference: *mut core::ffi::c_void,
    pub pszNoticeIdentifier: *mut core::ffi::c_void,
    pub pszNSINoticeIdentifier: *mut core::ffi::c_void,
    pub cCPSURLs: u32,
    pub rgCPSURLs: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type CERT_POLICY95_QUALIFIER1 struct {
	pszPracticesReference uintptr
	pszNoticeIdentifier uintptr
	pszNSINoticeIdentifier uintptr
	cCPSURLs uint32
	rgCPSURLs uintptr
}
type
  CERT_POLICY95_QUALIFIER1 = record
    pszPracticesReference: Pointer;
    pszNoticeIdentifier: Pointer;
    pszNSINoticeIdentifier: Pointer;
    cCPSURLs: DWORD;
    rgCPSURLs: Pointer;
  end;
const CERT_POLICY95_QUALIFIER1 = extern struct {
    pszPracticesReference: ?*anyopaque,
    pszNoticeIdentifier: ?*anyopaque,
    pszNSINoticeIdentifier: ?*anyopaque,
    cCPSURLs: u32,
    rgCPSURLs: ?*anyopaque,
};
type
  CERT_POLICY95_QUALIFIER1 {.bycopy.} = object
    pszPracticesReference: pointer
    pszNoticeIdentifier: pointer
    pszNSINoticeIdentifier: pointer
    cCPSURLs: uint32
    rgCPSURLs: pointer
struct CERT_POLICY95_QUALIFIER1
{
    void* pszPracticesReference;
    void* pszNoticeIdentifier;
    void* pszNSINoticeIdentifier;
    uint cCPSURLs;
    void* rgCPSURLs;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CERT_POLICY95_QUALIFIER1 サイズ: 20 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; pszPracticesReference : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pszNoticeIdentifier : LPSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pszNSINoticeIdentifier : LPSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cCPSURLs : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; rgCPSURLs : CPS_URLS* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_POLICY95_QUALIFIER1 サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; pszPracticesReference : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pszNoticeIdentifier : LPSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pszNSINoticeIdentifier : LPSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; cCPSURLs : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; rgCPSURLs : CPS_URLS* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CERT_POLICY95_QUALIFIER1
    #field intptr pszPracticesReference
    #field intptr pszNoticeIdentifier
    #field intptr pszNSINoticeIdentifier
    #field int cCPSURLs
    #field intptr rgCPSURLs
#endstruct

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