Win32 API 日本語リファレンス
ホームSystem.Ioctl › SD_QUERY_STATS_OUTPUT

SD_QUERY_STATS_OUTPUT

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

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

フィールド

フィールドサイズx64x86説明
SdsStreamSizeULONGLONG8+0+0$SDS(セキュリティ記述子)ストリームのサイズ(バイト)。
SdsAllocationSizeULONGLONG8+8+8$SDSストリームの割り当てサイズ(バイト)。
SiiStreamSizeULONGLONG8+16+16$SII(IDインデックス)ストリームのサイズ(バイト)。
SiiAllocationSizeULONGLONG8+24+24$SIIストリームの割り当てサイズ(バイト)。
SdhStreamSizeULONGLONG8+32+32$SDH(ハッシュインデックス)ストリームのサイズ(バイト)。
SdhAllocationSizeULONGLONG8+40+40$SDHストリームの割り当てサイズ(バイト)。
NumSDTotalULONGLONG8+48+48セキュリティ記述子の総数。
NumSDUnusedULONGLONG8+56+56未使用のセキュリティ記述子の数。

各言語での定義

#include <windows.h>

// SD_QUERY_STATS_OUTPUT  (x64 64 / x86 64 バイト)
typedef struct SD_QUERY_STATS_OUTPUT {
    ULONGLONG SdsStreamSize;
    ULONGLONG SdsAllocationSize;
    ULONGLONG SiiStreamSize;
    ULONGLONG SiiAllocationSize;
    ULONGLONG SdhStreamSize;
    ULONGLONG SdhAllocationSize;
    ULONGLONG NumSDTotal;
    ULONGLONG NumSDUnused;
} SD_QUERY_STATS_OUTPUT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SD_QUERY_STATS_OUTPUT
{
    public ulong SdsStreamSize;
    public ulong SdsAllocationSize;
    public ulong SiiStreamSize;
    public ulong SiiAllocationSize;
    public ulong SdhStreamSize;
    public ulong SdhAllocationSize;
    public ulong NumSDTotal;
    public ulong NumSDUnused;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SD_QUERY_STATS_OUTPUT
    Public SdsStreamSize As ULong
    Public SdsAllocationSize As ULong
    Public SiiStreamSize As ULong
    Public SiiAllocationSize As ULong
    Public SdhStreamSize As ULong
    Public SdhAllocationSize As ULong
    Public NumSDTotal As ULong
    Public NumSDUnused As ULong
End Structure
import ctypes
from ctypes import wintypes

class SD_QUERY_STATS_OUTPUT(ctypes.Structure):
    _fields_ = [
        ("SdsStreamSize", ctypes.c_ulonglong),
        ("SdsAllocationSize", ctypes.c_ulonglong),
        ("SiiStreamSize", ctypes.c_ulonglong),
        ("SiiAllocationSize", ctypes.c_ulonglong),
        ("SdhStreamSize", ctypes.c_ulonglong),
        ("SdhAllocationSize", ctypes.c_ulonglong),
        ("NumSDTotal", ctypes.c_ulonglong),
        ("NumSDUnused", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct SD_QUERY_STATS_OUTPUT {
    pub SdsStreamSize: u64,
    pub SdsAllocationSize: u64,
    pub SiiStreamSize: u64,
    pub SiiAllocationSize: u64,
    pub SdhStreamSize: u64,
    pub SdhAllocationSize: u64,
    pub NumSDTotal: u64,
    pub NumSDUnused: u64,
}
import "golang.org/x/sys/windows"

type SD_QUERY_STATS_OUTPUT struct {
	SdsStreamSize uint64
	SdsAllocationSize uint64
	SiiStreamSize uint64
	SiiAllocationSize uint64
	SdhStreamSize uint64
	SdhAllocationSize uint64
	NumSDTotal uint64
	NumSDUnused uint64
}
type
  SD_QUERY_STATS_OUTPUT = record
    SdsStreamSize: UInt64;
    SdsAllocationSize: UInt64;
    SiiStreamSize: UInt64;
    SiiAllocationSize: UInt64;
    SdhStreamSize: UInt64;
    SdhAllocationSize: UInt64;
    NumSDTotal: UInt64;
    NumSDUnused: UInt64;
  end;
const SD_QUERY_STATS_OUTPUT = extern struct {
    SdsStreamSize: u64,
    SdsAllocationSize: u64,
    SiiStreamSize: u64,
    SiiAllocationSize: u64,
    SdhStreamSize: u64,
    SdhAllocationSize: u64,
    NumSDTotal: u64,
    NumSDUnused: u64,
};
type
  SD_QUERY_STATS_OUTPUT {.bycopy.} = object
    SdsStreamSize: uint64
    SdsAllocationSize: uint64
    SiiStreamSize: uint64
    SiiAllocationSize: uint64
    SdhStreamSize: uint64
    SdhAllocationSize: uint64
    NumSDTotal: uint64
    NumSDUnused: uint64
struct SD_QUERY_STATS_OUTPUT
{
    ulong SdsStreamSize;
    ulong SdsAllocationSize;
    ulong SiiStreamSize;
    ulong SiiAllocationSize;
    ulong SdhStreamSize;
    ulong SdhAllocationSize;
    ulong NumSDTotal;
    ulong NumSDUnused;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SD_QUERY_STATS_OUTPUT サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; SdsStreamSize : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; SdsAllocationSize : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; SiiStreamSize : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; SiiAllocationSize : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; SdhStreamSize : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; SdhAllocationSize : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; NumSDTotal : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; NumSDUnused : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SD_QUERY_STATS_OUTPUT
    #field int64 SdsStreamSize
    #field int64 SdsAllocationSize
    #field int64 SiiStreamSize
    #field int64 SiiAllocationSize
    #field int64 SdhStreamSize
    #field int64 SdhAllocationSize
    #field int64 NumSDTotal
    #field int64 NumSDUnused
#endstruct

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