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

DIAGNOSTIC_DATA_SEARCH_CRITERIA

構造体
サイズx64: 56 バイト / x86: 32 バイト

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

フィールド

フィールドサイズx64x86説明
producerNamesLPWSTR*8/4+0+0検索対象とするプロデューサー名文字列の配列へのポインタ。
producerNameCountDWORD4+8+4producerNames配列の要素数。
textToMatchLPWSTR8/4+16+8イベント内で部分一致検索する文字列。NULL可。
categoryIdsINT*8/4+24+12絞り込み対象とするカテゴリID配列へのポインタ。
categoryIdCountDWORD4+32+16categoryIds配列の要素数。
privacyTagsINT*8/4+40+20絞り込み対象とするプライバシータグID配列へのポインタ。
privacyTagCountDWORD4+48+24privacyTags配列の要素数。
coreDataOnlyBOOL4+52+28コアデータのみに絞り込むかを示す真偽値。

各言語での定義

#include <windows.h>

// DIAGNOSTIC_DATA_SEARCH_CRITERIA  (x64 56 / x86 32 バイト)
typedef struct DIAGNOSTIC_DATA_SEARCH_CRITERIA {
    LPWSTR* producerNames;
    DWORD producerNameCount;
    LPWSTR textToMatch;
    INT* categoryIds;
    DWORD categoryIdCount;
    INT* privacyTags;
    DWORD privacyTagCount;
    BOOL coreDataOnly;
} DIAGNOSTIC_DATA_SEARCH_CRITERIA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIAGNOSTIC_DATA_SEARCH_CRITERIA
{
    public IntPtr producerNames;
    public uint producerNameCount;
    public IntPtr textToMatch;
    public IntPtr categoryIds;
    public uint categoryIdCount;
    public IntPtr privacyTags;
    public uint privacyTagCount;
    [MarshalAs(UnmanagedType.Bool)] public bool coreDataOnly;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIAGNOSTIC_DATA_SEARCH_CRITERIA
    Public producerNames As IntPtr
    Public producerNameCount As UInteger
    Public textToMatch As IntPtr
    Public categoryIds As IntPtr
    Public categoryIdCount As UInteger
    Public privacyTags As IntPtr
    Public privacyTagCount As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public coreDataOnly As Boolean
End Structure
import ctypes
from ctypes import wintypes

class DIAGNOSTIC_DATA_SEARCH_CRITERIA(ctypes.Structure):
    _fields_ = [
        ("producerNames", ctypes.c_void_p),
        ("producerNameCount", wintypes.DWORD),
        ("textToMatch", ctypes.c_void_p),
        ("categoryIds", ctypes.c_void_p),
        ("categoryIdCount", wintypes.DWORD),
        ("privacyTags", ctypes.c_void_p),
        ("privacyTagCount", wintypes.DWORD),
        ("coreDataOnly", wintypes.BOOL),
    ]
#[repr(C)]
pub struct DIAGNOSTIC_DATA_SEARCH_CRITERIA {
    pub producerNames: *mut core::ffi::c_void,
    pub producerNameCount: u32,
    pub textToMatch: *mut core::ffi::c_void,
    pub categoryIds: *mut core::ffi::c_void,
    pub categoryIdCount: u32,
    pub privacyTags: *mut core::ffi::c_void,
    pub privacyTagCount: u32,
    pub coreDataOnly: i32,
}
import "golang.org/x/sys/windows"

type DIAGNOSTIC_DATA_SEARCH_CRITERIA struct {
	producerNames uintptr
	producerNameCount uint32
	textToMatch uintptr
	categoryIds uintptr
	categoryIdCount uint32
	privacyTags uintptr
	privacyTagCount uint32
	coreDataOnly int32
}
type
  DIAGNOSTIC_DATA_SEARCH_CRITERIA = record
    producerNames: Pointer;
    producerNameCount: DWORD;
    textToMatch: Pointer;
    categoryIds: Pointer;
    categoryIdCount: DWORD;
    privacyTags: Pointer;
    privacyTagCount: DWORD;
    coreDataOnly: BOOL;
  end;
const DIAGNOSTIC_DATA_SEARCH_CRITERIA = extern struct {
    producerNames: ?*anyopaque,
    producerNameCount: u32,
    textToMatch: ?*anyopaque,
    categoryIds: ?*anyopaque,
    categoryIdCount: u32,
    privacyTags: ?*anyopaque,
    privacyTagCount: u32,
    coreDataOnly: i32,
};
type
  DIAGNOSTIC_DATA_SEARCH_CRITERIA {.bycopy.} = object
    producerNames: pointer
    producerNameCount: uint32
    textToMatch: pointer
    categoryIds: pointer
    categoryIdCount: uint32
    privacyTags: pointer
    privacyTagCount: uint32
    coreDataOnly: int32
struct DIAGNOSTIC_DATA_SEARCH_CRITERIA
{
    void* producerNames;
    uint producerNameCount;
    void* textToMatch;
    void* categoryIds;
    uint categoryIdCount;
    void* privacyTags;
    uint privacyTagCount;
    int coreDataOnly;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DIAGNOSTIC_DATA_SEARCH_CRITERIA サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; producerNames : LPWSTR* (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; producerNameCount : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; textToMatch : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; categoryIds : INT* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; categoryIdCount : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; privacyTags : INT* (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; privacyTagCount : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; coreDataOnly : BOOL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIAGNOSTIC_DATA_SEARCH_CRITERIA サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; producerNames : LPWSTR* (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; producerNameCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; textToMatch : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; categoryIds : INT* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; categoryIdCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; privacyTags : INT* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; privacyTagCount : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; coreDataOnly : BOOL (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DIAGNOSTIC_DATA_SEARCH_CRITERIA
    #field intptr producerNames
    #field int producerNameCount
    #field intptr textToMatch
    #field intptr categoryIds
    #field int categoryIdCount
    #field intptr privacyTags
    #field int privacyTagCount
    #field bool coreDataOnly
#endstruct

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