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

QUERY_SERVICE_CONFIGW

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

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

フィールド

フィールドサイズx64x86説明
dwServiceTypeENUM_SERVICE_TYPE4+0+0サービスの種類を示す ENUM_SERVICE_TYPE。
dwStartTypeSERVICE_START_TYPE4+4+4サービスの開始方法を示す SERVICE_START_TYPE。自動・手動・無効等。
dwErrorControlSERVICE_ERROR4+8+8起動失敗時の重大度を示す SERVICE_ERROR。
lpBinaryPathNameLPWSTR8/4+16+12サービス実行ファイルの完全パス(ワイド)。NULL 終端文字列。
lpLoadOrderGroupLPWSTR8/4+24+16サービスが属するロード順序グループ名(ワイド)。NULL 可。
dwTagIdDWORD4+32+20ロード順序グループ内での起動順を示すタグ ID。
lpDependenciesLPWSTR8/4+40+24依存するサービス/グループ名の複数文字列(ワイド)。二重 NULL 終端。
lpServiceStartNameLPWSTR8/4+48+28サービスを実行するアカウント名(ワイド)。NULL 終端文字列。
lpDisplayNameLPWSTR8/4+56+32サービスの表示名(ワイド)。NULL 終端文字列。

各言語での定義

#include <windows.h>

// QUERY_SERVICE_CONFIGW  (x64 64 / x86 36 バイト)
typedef struct QUERY_SERVICE_CONFIGW {
    ENUM_SERVICE_TYPE dwServiceType;
    SERVICE_START_TYPE dwStartType;
    SERVICE_ERROR dwErrorControl;
    LPWSTR lpBinaryPathName;
    LPWSTR lpLoadOrderGroup;
    DWORD dwTagId;
    LPWSTR lpDependencies;
    LPWSTR lpServiceStartName;
    LPWSTR lpDisplayName;
} QUERY_SERVICE_CONFIGW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct QUERY_SERVICE_CONFIGW
{
    public uint dwServiceType;
    public uint dwStartType;
    public uint dwErrorControl;
    public IntPtr lpBinaryPathName;
    public IntPtr lpLoadOrderGroup;
    public uint dwTagId;
    public IntPtr lpDependencies;
    public IntPtr lpServiceStartName;
    public IntPtr lpDisplayName;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure QUERY_SERVICE_CONFIGW
    Public dwServiceType As UInteger
    Public dwStartType As UInteger
    Public dwErrorControl As UInteger
    Public lpBinaryPathName As IntPtr
    Public lpLoadOrderGroup As IntPtr
    Public dwTagId As UInteger
    Public lpDependencies As IntPtr
    Public lpServiceStartName As IntPtr
    Public lpDisplayName As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class QUERY_SERVICE_CONFIGW(ctypes.Structure):
    _fields_ = [
        ("dwServiceType", wintypes.DWORD),
        ("dwStartType", wintypes.DWORD),
        ("dwErrorControl", wintypes.DWORD),
        ("lpBinaryPathName", ctypes.c_void_p),
        ("lpLoadOrderGroup", ctypes.c_void_p),
        ("dwTagId", wintypes.DWORD),
        ("lpDependencies", ctypes.c_void_p),
        ("lpServiceStartName", ctypes.c_void_p),
        ("lpDisplayName", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct QUERY_SERVICE_CONFIGW {
    pub dwServiceType: u32,
    pub dwStartType: u32,
    pub dwErrorControl: u32,
    pub lpBinaryPathName: *mut core::ffi::c_void,
    pub lpLoadOrderGroup: *mut core::ffi::c_void,
    pub dwTagId: u32,
    pub lpDependencies: *mut core::ffi::c_void,
    pub lpServiceStartName: *mut core::ffi::c_void,
    pub lpDisplayName: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type QUERY_SERVICE_CONFIGW struct {
	dwServiceType uint32
	dwStartType uint32
	dwErrorControl uint32
	lpBinaryPathName uintptr
	lpLoadOrderGroup uintptr
	dwTagId uint32
	lpDependencies uintptr
	lpServiceStartName uintptr
	lpDisplayName uintptr
}
type
  QUERY_SERVICE_CONFIGW = record
    dwServiceType: DWORD;
    dwStartType: DWORD;
    dwErrorControl: DWORD;
    lpBinaryPathName: Pointer;
    lpLoadOrderGroup: Pointer;
    dwTagId: DWORD;
    lpDependencies: Pointer;
    lpServiceStartName: Pointer;
    lpDisplayName: Pointer;
  end;
const QUERY_SERVICE_CONFIGW = extern struct {
    dwServiceType: u32,
    dwStartType: u32,
    dwErrorControl: u32,
    lpBinaryPathName: ?*anyopaque,
    lpLoadOrderGroup: ?*anyopaque,
    dwTagId: u32,
    lpDependencies: ?*anyopaque,
    lpServiceStartName: ?*anyopaque,
    lpDisplayName: ?*anyopaque,
};
type
  QUERY_SERVICE_CONFIGW {.bycopy.} = object
    dwServiceType: uint32
    dwStartType: uint32
    dwErrorControl: uint32
    lpBinaryPathName: pointer
    lpLoadOrderGroup: pointer
    dwTagId: uint32
    lpDependencies: pointer
    lpServiceStartName: pointer
    lpDisplayName: pointer
struct QUERY_SERVICE_CONFIGW
{
    uint dwServiceType;
    uint dwStartType;
    uint dwErrorControl;
    void* lpBinaryPathName;
    void* lpLoadOrderGroup;
    uint dwTagId;
    void* lpDependencies;
    void* lpServiceStartName;
    void* lpDisplayName;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; QUERY_SERVICE_CONFIGW サイズ: 36 バイト(x86)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; dwServiceType : ENUM_SERVICE_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwStartType : SERVICE_START_TYPE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwErrorControl : SERVICE_ERROR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpBinaryPathName : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpLoadOrderGroup : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwTagId : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpDependencies : LPWSTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpServiceStartName : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpDisplayName : LPWSTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; QUERY_SERVICE_CONFIGW サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; dwServiceType : ENUM_SERVICE_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwStartType : SERVICE_START_TYPE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwErrorControl : SERVICE_ERROR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpBinaryPathName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpLoadOrderGroup : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; dwTagId : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpDependencies : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpServiceStartName : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpDisplayName : LPWSTR (+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 QUERY_SERVICE_CONFIGW
    #field int dwServiceType
    #field int dwStartType
    #field int dwErrorControl
    #field intptr lpBinaryPathName
    #field intptr lpLoadOrderGroup
    #field int dwTagId
    #field intptr lpDependencies
    #field intptr lpServiceStartName
    #field intptr lpDisplayName
#endstruct

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