Win32 API 日本語リファレンス
ホームNetworking.Clustering › GetClusterNotifyV2

GetClusterNotifyV2

関数
V2通知ポートから次のクラスター通知イベントを取得する。
DLLCLUSAPI.dll呼出規約winapi対応OSwindowsserver2012

シグネチャ

// CLUSAPI.dll
#include <windows.h>

DWORD GetClusterNotifyV2(
    HCHANGE hChange,
    UINT_PTR* lpdwNotifyKey,
    NOTIFY_FILTER_AND_TYPE* pFilterAndType,   // optional
    BYTE* buffer,   // optional
    DWORD* lpbBufferSize,   // optional
    LPWSTR lpszObjectId,   // optional
    DWORD* lpcchObjectId,   // optional
    LPWSTR lpszParentId,   // optional
    DWORD* lpcchParentId,   // optional
    LPWSTR lpszName,   // optional
    DWORD* lpcchName,   // optional
    LPWSTR lpszType,   // optional
    DWORD* lpcchType,   // optional
    DWORD dwMilliseconds   // optional
);

パラメーター

名前方向
hChangeHCHANGEin
lpdwNotifyKeyUINT_PTR*out
pFilterAndTypeNOTIFY_FILTER_AND_TYPE*inoutoptional
bufferBYTE*inoutoptional
lpbBufferSizeDWORD*inoutoptional
lpszObjectIdLPWSTRinoutoptional
lpcchObjectIdDWORD*inoutoptional
lpszParentIdLPWSTRinoutoptional
lpcchParentIdDWORD*inoutoptional
lpszNameLPWSTRinoutoptional
lpcchNameDWORD*inoutoptional
lpszTypeLPWSTRinoutoptional
lpcchTypeDWORD*inoutoptional
dwMillisecondsDWORDinoptional

戻り値の型: DWORD

各言語での呼び出し定義

// CLUSAPI.dll
#include <windows.h>

DWORD GetClusterNotifyV2(
    HCHANGE hChange,
    UINT_PTR* lpdwNotifyKey,
    NOTIFY_FILTER_AND_TYPE* pFilterAndType,   // optional
    BYTE* buffer,   // optional
    DWORD* lpbBufferSize,   // optional
    LPWSTR lpszObjectId,   // optional
    DWORD* lpcchObjectId,   // optional
    LPWSTR lpszParentId,   // optional
    DWORD* lpcchParentId,   // optional
    LPWSTR lpszName,   // optional
    DWORD* lpcchName,   // optional
    LPWSTR lpszType,   // optional
    DWORD* lpcchType,   // optional
    DWORD dwMilliseconds   // optional
);
[DllImport("CLUSAPI.dll", ExactSpelling = true)]
static extern uint GetClusterNotifyV2(
    IntPtr hChange,   // HCHANGE
    out UIntPtr lpdwNotifyKey,   // UINT_PTR* out
    IntPtr pFilterAndType,   // NOTIFY_FILTER_AND_TYPE* optional, in/out
    IntPtr buffer,   // BYTE* optional, in/out
    IntPtr lpbBufferSize,   // DWORD* optional, in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszObjectId,   // LPWSTR optional, in/out
    IntPtr lpcchObjectId,   // DWORD* optional, in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszParentId,   // LPWSTR optional, in/out
    IntPtr lpcchParentId,   // DWORD* optional, in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszName,   // LPWSTR optional, in/out
    IntPtr lpcchName,   // DWORD* optional, in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszType,   // LPWSTR optional, in/out
    IntPtr lpcchType,   // DWORD* optional, in/out
    uint dwMilliseconds   // DWORD optional
);
<DllImport("CLUSAPI.dll", ExactSpelling:=True)>
Public Shared Function GetClusterNotifyV2(
    hChange As IntPtr,   ' HCHANGE
    <Out> ByRef lpdwNotifyKey As UIntPtr,   ' UINT_PTR* out
    pFilterAndType As IntPtr,   ' NOTIFY_FILTER_AND_TYPE* optional, in/out
    buffer As IntPtr,   ' BYTE* optional, in/out
    lpbBufferSize As IntPtr,   ' DWORD* optional, in/out
    <MarshalAs(UnmanagedType.LPWStr)> lpszObjectId As System.Text.StringBuilder,   ' LPWSTR optional, in/out
    lpcchObjectId As IntPtr,   ' DWORD* optional, in/out
    <MarshalAs(UnmanagedType.LPWStr)> lpszParentId As System.Text.StringBuilder,   ' LPWSTR optional, in/out
    lpcchParentId As IntPtr,   ' DWORD* optional, in/out
    <MarshalAs(UnmanagedType.LPWStr)> lpszName As System.Text.StringBuilder,   ' LPWSTR optional, in/out
    lpcchName As IntPtr,   ' DWORD* optional, in/out
    <MarshalAs(UnmanagedType.LPWStr)> lpszType As System.Text.StringBuilder,   ' LPWSTR optional, in/out
    lpcchType As IntPtr,   ' DWORD* optional, in/out
    dwMilliseconds As UInteger   ' DWORD optional
) As UInteger
End Function
' hChange : HCHANGE
' lpdwNotifyKey : UINT_PTR* out
' pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out
' buffer : BYTE* optional, in/out
' lpbBufferSize : DWORD* optional, in/out
' lpszObjectId : LPWSTR optional, in/out
' lpcchObjectId : DWORD* optional, in/out
' lpszParentId : LPWSTR optional, in/out
' lpcchParentId : DWORD* optional, in/out
' lpszName : LPWSTR optional, in/out
' lpcchName : DWORD* optional, in/out
' lpszType : LPWSTR optional, in/out
' lpcchType : DWORD* optional, in/out
' dwMilliseconds : DWORD optional
Declare PtrSafe Function GetClusterNotifyV2 Lib "clusapi" ( _
    ByVal hChange As LongPtr, _
    ByRef lpdwNotifyKey As LongPtr, _
    ByVal pFilterAndType As LongPtr, _
    ByVal buffer As LongPtr, _
    ByVal lpbBufferSize As LongPtr, _
    ByVal lpszObjectId As LongPtr, _
    ByVal lpcchObjectId As LongPtr, _
    ByVal lpszParentId As LongPtr, _
    ByVal lpcchParentId As LongPtr, _
    ByVal lpszName As LongPtr, _
    ByVal lpcchName As LongPtr, _
    ByVal lpszType As LongPtr, _
    ByVal lpcchType As LongPtr, _
    ByVal dwMilliseconds As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

GetClusterNotifyV2 = ctypes.windll.clusapi.GetClusterNotifyV2
GetClusterNotifyV2.restype = wintypes.DWORD
GetClusterNotifyV2.argtypes = [
    ctypes.c_ssize_t,  # hChange : HCHANGE
    ctypes.POINTER(ctypes.c_size_t),  # lpdwNotifyKey : UINT_PTR* out
    ctypes.c_void_p,  # pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out
    ctypes.POINTER(ctypes.c_ubyte),  # buffer : BYTE* optional, in/out
    ctypes.POINTER(wintypes.DWORD),  # lpbBufferSize : DWORD* optional, in/out
    wintypes.LPWSTR,  # lpszObjectId : LPWSTR optional, in/out
    ctypes.POINTER(wintypes.DWORD),  # lpcchObjectId : DWORD* optional, in/out
    wintypes.LPWSTR,  # lpszParentId : LPWSTR optional, in/out
    ctypes.POINTER(wintypes.DWORD),  # lpcchParentId : DWORD* optional, in/out
    wintypes.LPWSTR,  # lpszName : LPWSTR optional, in/out
    ctypes.POINTER(wintypes.DWORD),  # lpcchName : DWORD* optional, in/out
    wintypes.LPWSTR,  # lpszType : LPWSTR optional, in/out
    ctypes.POINTER(wintypes.DWORD),  # lpcchType : DWORD* optional, in/out
    wintypes.DWORD,  # dwMilliseconds : DWORD optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('CLUSAPI.dll')
GetClusterNotifyV2 = Fiddle::Function.new(
  lib['GetClusterNotifyV2'],
  [
    Fiddle::TYPE_INTPTR_T,  # hChange : HCHANGE
    Fiddle::TYPE_VOIDP,  # lpdwNotifyKey : UINT_PTR* out
    Fiddle::TYPE_VOIDP,  # pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out
    Fiddle::TYPE_VOIDP,  # buffer : BYTE* optional, in/out
    Fiddle::TYPE_VOIDP,  # lpbBufferSize : DWORD* optional, in/out
    Fiddle::TYPE_VOIDP,  # lpszObjectId : LPWSTR optional, in/out
    Fiddle::TYPE_VOIDP,  # lpcchObjectId : DWORD* optional, in/out
    Fiddle::TYPE_VOIDP,  # lpszParentId : LPWSTR optional, in/out
    Fiddle::TYPE_VOIDP,  # lpcchParentId : DWORD* optional, in/out
    Fiddle::TYPE_VOIDP,  # lpszName : LPWSTR optional, in/out
    Fiddle::TYPE_VOIDP,  # lpcchName : DWORD* optional, in/out
    Fiddle::TYPE_VOIDP,  # lpszType : LPWSTR optional, in/out
    Fiddle::TYPE_VOIDP,  # lpcchType : DWORD* optional, in/out
    -Fiddle::TYPE_INT,  # dwMilliseconds : DWORD optional
  ],
  -Fiddle::TYPE_INT)
#[link(name = "clusapi")]
extern "system" {
    fn GetClusterNotifyV2(
        hChange: isize,  // HCHANGE
        lpdwNotifyKey: *mut usize,  // UINT_PTR* out
        pFilterAndType: *mut NOTIFY_FILTER_AND_TYPE,  // NOTIFY_FILTER_AND_TYPE* optional, in/out
        buffer: *mut u8,  // BYTE* optional, in/out
        lpbBufferSize: *mut u32,  // DWORD* optional, in/out
        lpszObjectId: *mut u16,  // LPWSTR optional, in/out
        lpcchObjectId: *mut u32,  // DWORD* optional, in/out
        lpszParentId: *mut u16,  // LPWSTR optional, in/out
        lpcchParentId: *mut u32,  // DWORD* optional, in/out
        lpszName: *mut u16,  // LPWSTR optional, in/out
        lpcchName: *mut u32,  // DWORD* optional, in/out
        lpszType: *mut u16,  // LPWSTR optional, in/out
        lpcchType: *mut u32,  // DWORD* optional, in/out
        dwMilliseconds: u32  // DWORD optional
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("CLUSAPI.dll")]
public static extern uint GetClusterNotifyV2(IntPtr hChange, out UIntPtr lpdwNotifyKey, IntPtr pFilterAndType, IntPtr buffer, IntPtr lpbBufferSize, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszObjectId, IntPtr lpcchObjectId, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszParentId, IntPtr lpcchParentId, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszName, IntPtr lpcchName, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpszType, IntPtr lpcchType, uint dwMilliseconds);
"@
$api = Add-Type -MemberDefinition $sig -Name 'CLUSAPI_GetClusterNotifyV2' -Namespace Win32 -PassThru
# $api::GetClusterNotifyV2(hChange, lpdwNotifyKey, pFilterAndType, buffer, lpbBufferSize, lpszObjectId, lpcchObjectId, lpszParentId, lpcchParentId, lpszName, lpcchName, lpszType, lpcchType, dwMilliseconds)
#uselib "CLUSAPI.dll"
#func global GetClusterNotifyV2 "GetClusterNotifyV2" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; GetClusterNotifyV2 hChange, varptr(lpdwNotifyKey), varptr(pFilterAndType), varptr(buffer), varptr(lpbBufferSize), varptr(lpszObjectId), varptr(lpcchObjectId), varptr(lpszParentId), varptr(lpcchParentId), varptr(lpszName), varptr(lpcchName), varptr(lpszType), varptr(lpcchType), dwMilliseconds   ; 戻り値は stat
; hChange : HCHANGE -> "sptr"
; lpdwNotifyKey : UINT_PTR* out -> "sptr"
; pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out -> "sptr"
; buffer : BYTE* optional, in/out -> "sptr"
; lpbBufferSize : DWORD* optional, in/out -> "sptr"
; lpszObjectId : LPWSTR optional, in/out -> "sptr"
; lpcchObjectId : DWORD* optional, in/out -> "sptr"
; lpszParentId : LPWSTR optional, in/out -> "sptr"
; lpcchParentId : DWORD* optional, in/out -> "sptr"
; lpszName : LPWSTR optional, in/out -> "sptr"
; lpcchName : DWORD* optional, in/out -> "sptr"
; lpszType : LPWSTR optional, in/out -> "sptr"
; lpcchType : DWORD* optional, in/out -> "sptr"
; dwMilliseconds : DWORD optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "CLUSAPI.dll"
#cfunc global GetClusterNotifyV2 "GetClusterNotifyV2" sptr, var, var, var, var, var, var, var, var, var, var, var, var, int
; res = GetClusterNotifyV2(hChange, lpdwNotifyKey, pFilterAndType, buffer, lpbBufferSize, lpszObjectId, lpcchObjectId, lpszParentId, lpcchParentId, lpszName, lpcchName, lpszType, lpcchType, dwMilliseconds)
; hChange : HCHANGE -> "sptr"
; lpdwNotifyKey : UINT_PTR* out -> "var"
; pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out -> "var"
; buffer : BYTE* optional, in/out -> "var"
; lpbBufferSize : DWORD* optional, in/out -> "var"
; lpszObjectId : LPWSTR optional, in/out -> "var"
; lpcchObjectId : DWORD* optional, in/out -> "var"
; lpszParentId : LPWSTR optional, in/out -> "var"
; lpcchParentId : DWORD* optional, in/out -> "var"
; lpszName : LPWSTR optional, in/out -> "var"
; lpcchName : DWORD* optional, in/out -> "var"
; lpszType : LPWSTR optional, in/out -> "var"
; lpcchType : DWORD* optional, in/out -> "var"
; dwMilliseconds : DWORD optional -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD GetClusterNotifyV2(HCHANGE hChange, UINT_PTR* lpdwNotifyKey, NOTIFY_FILTER_AND_TYPE* pFilterAndType, BYTE* buffer, DWORD* lpbBufferSize, LPWSTR lpszObjectId, DWORD* lpcchObjectId, LPWSTR lpszParentId, DWORD* lpcchParentId, LPWSTR lpszName, DWORD* lpcchName, LPWSTR lpszType, DWORD* lpcchType, DWORD dwMilliseconds)
#uselib "CLUSAPI.dll"
#cfunc global GetClusterNotifyV2 "GetClusterNotifyV2" intptr, var, var, var, var, var, var, var, var, var, var, var, var, int
; res = GetClusterNotifyV2(hChange, lpdwNotifyKey, pFilterAndType, buffer, lpbBufferSize, lpszObjectId, lpcchObjectId, lpszParentId, lpcchParentId, lpszName, lpcchName, lpszType, lpcchType, dwMilliseconds)
; hChange : HCHANGE -> "intptr"
; lpdwNotifyKey : UINT_PTR* out -> "var"
; pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out -> "var"
; buffer : BYTE* optional, in/out -> "var"
; lpbBufferSize : DWORD* optional, in/out -> "var"
; lpszObjectId : LPWSTR optional, in/out -> "var"
; lpcchObjectId : DWORD* optional, in/out -> "var"
; lpszParentId : LPWSTR optional, in/out -> "var"
; lpcchParentId : DWORD* optional, in/out -> "var"
; lpszName : LPWSTR optional, in/out -> "var"
; lpcchName : DWORD* optional, in/out -> "var"
; lpszType : LPWSTR optional, in/out -> "var"
; lpcchType : DWORD* optional, in/out -> "var"
; dwMilliseconds : DWORD optional -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	clusapi = windows.NewLazySystemDLL("CLUSAPI.dll")
	procGetClusterNotifyV2 = clusapi.NewProc("GetClusterNotifyV2")
)

// hChange (HCHANGE), lpdwNotifyKey (UINT_PTR* out), pFilterAndType (NOTIFY_FILTER_AND_TYPE* optional, in/out), buffer (BYTE* optional, in/out), lpbBufferSize (DWORD* optional, in/out), lpszObjectId (LPWSTR optional, in/out), lpcchObjectId (DWORD* optional, in/out), lpszParentId (LPWSTR optional, in/out), lpcchParentId (DWORD* optional, in/out), lpszName (LPWSTR optional, in/out), lpcchName (DWORD* optional, in/out), lpszType (LPWSTR optional, in/out), lpcchType (DWORD* optional, in/out), dwMilliseconds (DWORD optional)
r1, _, err := procGetClusterNotifyV2.Call(
	uintptr(hChange),
	uintptr(lpdwNotifyKey),
	uintptr(pFilterAndType),
	uintptr(buffer),
	uintptr(lpbBufferSize),
	uintptr(lpszObjectId),
	uintptr(lpcchObjectId),
	uintptr(lpszParentId),
	uintptr(lpcchParentId),
	uintptr(lpszName),
	uintptr(lpcchName),
	uintptr(lpszType),
	uintptr(lpcchType),
	uintptr(dwMilliseconds),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function GetClusterNotifyV2(
  hChange: NativeInt;   // HCHANGE
  lpdwNotifyKey: Pointer;   // UINT_PTR* out
  pFilterAndType: Pointer;   // NOTIFY_FILTER_AND_TYPE* optional, in/out
  buffer: Pointer;   // BYTE* optional, in/out
  lpbBufferSize: Pointer;   // DWORD* optional, in/out
  lpszObjectId: PWideChar;   // LPWSTR optional, in/out
  lpcchObjectId: Pointer;   // DWORD* optional, in/out
  lpszParentId: PWideChar;   // LPWSTR optional, in/out
  lpcchParentId: Pointer;   // DWORD* optional, in/out
  lpszName: PWideChar;   // LPWSTR optional, in/out
  lpcchName: Pointer;   // DWORD* optional, in/out
  lpszType: PWideChar;   // LPWSTR optional, in/out
  lpcchType: Pointer;   // DWORD* optional, in/out
  dwMilliseconds: DWORD   // DWORD optional
): DWORD; stdcall;
  external 'CLUSAPI.dll' name 'GetClusterNotifyV2';
result := DllCall("CLUSAPI\GetClusterNotifyV2"
    , "Ptr", hChange   ; HCHANGE
    , "Ptr", lpdwNotifyKey   ; UINT_PTR* out
    , "Ptr", pFilterAndType   ; NOTIFY_FILTER_AND_TYPE* optional, in/out
    , "Ptr", buffer   ; BYTE* optional, in/out
    , "Ptr", lpbBufferSize   ; DWORD* optional, in/out
    , "Ptr", lpszObjectId   ; LPWSTR optional, in/out
    , "Ptr", lpcchObjectId   ; DWORD* optional, in/out
    , "Ptr", lpszParentId   ; LPWSTR optional, in/out
    , "Ptr", lpcchParentId   ; DWORD* optional, in/out
    , "Ptr", lpszName   ; LPWSTR optional, in/out
    , "Ptr", lpcchName   ; DWORD* optional, in/out
    , "Ptr", lpszType   ; LPWSTR optional, in/out
    , "Ptr", lpcchType   ; DWORD* optional, in/out
    , "UInt", dwMilliseconds   ; DWORD optional
    , "UInt")   ; return: DWORD
●GetClusterNotifyV2(hChange, lpdwNotifyKey, pFilterAndType, buffer, lpbBufferSize, lpszObjectId, lpcchObjectId, lpszParentId, lpcchParentId, lpszName, lpcchName, lpszType, lpcchType, dwMilliseconds) = DLL("CLUSAPI.dll", "dword GetClusterNotifyV2(int, void*, void*, void*, void*, char*, void*, char*, void*, char*, void*, char*, void*, dword)")
# 呼び出し: GetClusterNotifyV2(hChange, lpdwNotifyKey, pFilterAndType, buffer, lpbBufferSize, lpszObjectId, lpcchObjectId, lpszParentId, lpcchParentId, lpszName, lpcchName, lpszType, lpcchType, dwMilliseconds)
# hChange : HCHANGE -> "int"
# lpdwNotifyKey : UINT_PTR* out -> "void*"
# pFilterAndType : NOTIFY_FILTER_AND_TYPE* optional, in/out -> "void*"
# buffer : BYTE* optional, in/out -> "void*"
# lpbBufferSize : DWORD* optional, in/out -> "void*"
# lpszObjectId : LPWSTR optional, in/out -> "char*"
# lpcchObjectId : DWORD* optional, in/out -> "void*"
# lpszParentId : LPWSTR optional, in/out -> "char*"
# lpcchParentId : DWORD* optional, in/out -> "void*"
# lpszName : LPWSTR optional, in/out -> "char*"
# lpcchName : DWORD* optional, in/out -> "void*"
# lpszType : LPWSTR optional, in/out -> "char*"
# lpcchType : DWORD* optional, in/out -> "void*"
# dwMilliseconds : DWORD optional -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。