Win32 API 日本語リファレンス
ホーム › NetworkManagement.Snmp › SnmpRegister

SnmpRegister

関数
WinSNMPで指定通知の受信登録または解除を行う。
DLLwsnmp32.dll呼出規約winapi対応OSWindows 2000 以降

シグネチャ

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

DWORD SnmpRegister(
    INT_PTR session,
    INT_PTR srcEntity,
    INT_PTR dstEntity,
    INT_PTR context,
    smiOID* notification,
    SNMP_STATUS state
);

パラメーター

名前型方向説明
sessionINT_PTRinトラップおよび通知の登録または登録解除を行う WinSNMP セッションのハンドル。
srcEntityINT_PTRin

登録要求の送信元となる管理エンティティのハンドル。SNMP マネージャーの役割を果たすこのエンティティが、トラップまたは通知を受信します。

実装はこのパラメーターを、トラップおよび通知が WinSNMP アプリケーションに到達するのをフィルタリングする目的では使用しないため、WinSNMP マネージャーアプリケーションでは通常、このパラメーターに NULL を渡します。

このパラメーターが NULL の場合、Microsoft WinSNMP 実装は、トラップおよび通知要求のすべての送信元を登録または登録解除します。

SnmpRecvMsg 関数の srcEntity パラメーターは役割が異なる点に注意してください。同関数では、srcEntity はトラップを送信したエンティティのハンドルを受け取ります。

dstEntityINT_PTRin

登録要求の受信側となる管理エンティティのハンドル。SNMP エージェントの役割を果たすこのエンティティが、トラップまたは通知を送信します。

このパラメーターが NULL の場合、実装は、すべての管理エンティティからのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。

SnmpRecvMsg 関数の dstEntity パラメーターは、トラップ通知に登録する管理エンティティのハンドルを受け取る点に注意してください。

contextINT_PTRin

コンテキスト (管理対象オブジェクトリソースの集合) のハンドル。

このパラメーターが NULL の場合、実装は、すべてのコンテキストのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。

notificationsmiOID*inout

1 種類のトラップまたは通知に対するパターンマッチング用のシーケンスを格納した smiOID 構造体へのポインター。実装はこのシーケンスを使用して、WinSNMP アプリケーションが登録または登録解除を行う対象のトラップまたは通知の種類を識別します。詳細については、後述の「解説」セクションを参照してください。

このパラメーターが NULL の場合、実装は、dstEntity パラメーターで指定された 1 つまたは複数の管理エンティティからのすべてのトラップおよび通知について WinSNMP アプリケーションを登録または登録解除します。

stateSNMP_STATUSin

WinSNMP アプリケーションがトラップおよび通知を受信するために登録するのか、登録解除するのかを示す符号なし long 整数型の変数を指定します。このパラメーターは次のいずれかの値と等しい必要がありますが、異なる値が格納されている場合、実装はアプリケーションを登録します。

値 意味
SNMPAPI_OFF
トラップおよび通知を無効にします。
SNMPAPI_ON
トラップおよび通知を受信するために登録します。

戻り値の型: DWORD

公式ドキュメント

WinSNMP の SnmpRegister 関数は、トラップおよび通知の受信について WinSNMP アプリケーションを登録または登録解除します。アプリケーションは、登録してトラップと通知を受信することも、登録解除してトラップと通知を無効にすることもできます。

戻り値

関数が成功した場合、戻り値は SNMPAPI_SUCCESS です。

関数が失敗した場合、戻り値は SNMPAPI_FAILURE です。拡張エラー情報を取得するには、 SnmpGetLastError を呼び出します。 SnmpGetLastError 関数は、次の WinSNMP エラーまたはネットワークトランスポート層のエラーのいずれかを返すことがあります。

戻りコード 説明
SNMPAPI_NOT_INITIALIZED

SnmpStartup 関数が正常に完了しませんでした。

SNMPAPI_ALLOC_ERROR
メモリの割り当て中にエラーが発生しました。
SNMPAPI_SESSION_INVALID
session パラメーターが無効です。
SNMPAPI_ENTITY_INVALID
エンティティを指定するパラメーターの一方または両方が無効です。
SNMPAPI_CONTEXT_INVALID
context パラメーターが無効です。
SNMPAPI_OID_INVALID
notification パラメーターが無効です。
SNMPAPI_TL_NOT_INITIALIZED
ネットワークトランスポート層が初期化されていないか、SNMPTRAP.EXE サービスを開始できませんでした。
SNMPAPI_TL_IN_USE
トラップポートが使用できません。
SNMPAPI_TL_NOT_AVAILABLE
ネットワークサブシステムで障害が発生しました。
SNMPAPI_OTHER_ERROR
不明または未定義のエラーが発生しました。

詳細については、 Network Transport Errors を参照してください。

解説(Remarks)

通常、 SnmpRegister 関数を呼び出すのは、エージェントアプリケーションではなく WinSNMP マネージャーアプリケーションです。

管理者以外のユーザーの場合、Windows 2000 および Windows XP では SNMP トラップサービスが開始されているときにのみ SnmpRegister 関数が成功する点に注意してください。

WinSNMP アプリケーションが SnmpRegister 関数の呼び出しで srcEntity、dstEntity、context、notification の各パラメーターに NULL を渡した場合、実装はそのパラメーターを、トラップおよび通知が WinSNMP アプリケーションに到達するのをフィルタリングする目的では使用しません。前述のすべてのパラメーターに NULL を渡した場合、実装は受信したすべての通知をセッションに配信します。

WinSNMP アプリケーションが特定の種類のトラップまたは通知を受信するために登録する場合は、その種類のトラップに対応するオブジェクト識別子、すなわち smiOID 構造体を定義する必要があります。notification パラメーターは、この構造体を指している必要があります。トラップおよび通知のオブジェクト識別子は、RFC 1907「Management Information Base for Version 2 of the Simple Network Management Protocol (SNMPv2)」で定義されています。詳細については、 Managing Traps and Notifications および Translating Traps from SNMPv1 to SNMPv2C を参照してください。

実装は、notification パラメーターの値を、受信したトラップおよび通知と照合するためのパターンとして使用します。たとえば、WinSNMP アプリケーションが notification パラメーターで n 個のサブ識別子を渡し、受信したトラップの先頭 n 個のサブ識別子が渡されたすべてのサブ識別子と一致する場合、そのトラップのオブジェクト識別子は一致と見なされます。受信したトラップのサブ識別子が n 個未満の場合、オブジェクト識別子は一致しません。一致した場合、実装はそのトラップまたは通知を WinSNMP アプリケーションに送信します。

dstEntity、srcEntity、context の各パラメーターのいずれか、またはすべてが NULL の場合、実装は、後続の SnmpRecvMsg 関数の呼び出しで、同関数の対応するパラメーターのためにリソースを割り当てる必要が生じることがあります。 SnmpRecvMsg が返すリソースが不要になったら、アプリケーションはそのリソースに対応する関数を使用して個々のリソースを解放する必要があります。詳細については、 SnmpFreeEntity および SnmpFreeContext を参照してください。

詳細については、 Multiple Trap Registrations を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

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

DWORD SnmpRegister(
    INT_PTR session,
    INT_PTR srcEntity,
    INT_PTR dstEntity,
    INT_PTR context,
    smiOID* notification,
    SNMP_STATUS state
);
[DllImport("wsnmp32.dll", ExactSpelling = true)]
static extern uint SnmpRegister(
    IntPtr session,   // INT_PTR
    IntPtr srcEntity,   // INT_PTR
    IntPtr dstEntity,   // INT_PTR
    IntPtr context,   // INT_PTR
    IntPtr notification,   // smiOID* in/out
    uint state   // SNMP_STATUS
);
<DllImport("wsnmp32.dll", ExactSpelling:=True)>
Public Shared Function SnmpRegister(
    session As IntPtr,   ' INT_PTR
    srcEntity As IntPtr,   ' INT_PTR
    dstEntity As IntPtr,   ' INT_PTR
    context As IntPtr,   ' INT_PTR
    notification As IntPtr,   ' smiOID* in/out
    state As UInteger   ' SNMP_STATUS
) As UInteger
End Function
' session : INT_PTR
' srcEntity : INT_PTR
' dstEntity : INT_PTR
' context : INT_PTR
' notification : smiOID* in/out
' state : SNMP_STATUS
Declare PtrSafe Function SnmpRegister Lib "wsnmp32" ( _
    ByVal session As LongPtr, _
    ByVal srcEntity As LongPtr, _
    ByVal dstEntity As LongPtr, _
    ByVal context As LongPtr, _
    ByVal notification As LongPtr, _
    ByVal state As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

SnmpRegister = ctypes.windll.wsnmp32.SnmpRegister
SnmpRegister.restype = wintypes.DWORD
SnmpRegister.argtypes = [
    ctypes.c_ssize_t,  # session : INT_PTR
    ctypes.c_ssize_t,  # srcEntity : INT_PTR
    ctypes.c_ssize_t,  # dstEntity : INT_PTR
    ctypes.c_ssize_t,  # context : INT_PTR
    ctypes.c_void_p,  # notification : smiOID* in/out
    wintypes.DWORD,  # state : SNMP_STATUS
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('wsnmp32.dll')
SnmpRegister = Fiddle::Function.new(
  lib['SnmpRegister'],
  [
    Fiddle::TYPE_INTPTR_T,  # session : INT_PTR
    Fiddle::TYPE_INTPTR_T,  # srcEntity : INT_PTR
    Fiddle::TYPE_INTPTR_T,  # dstEntity : INT_PTR
    Fiddle::TYPE_INTPTR_T,  # context : INT_PTR
    Fiddle::TYPE_VOIDP,  # notification : smiOID* in/out
    -Fiddle::TYPE_INT,  # state : SNMP_STATUS
  ],
  -Fiddle::TYPE_INT)
#[link(name = "wsnmp32")]
extern "system" {
    fn SnmpRegister(
        session: isize,  // INT_PTR
        srcEntity: isize,  // INT_PTR
        dstEntity: isize,  // INT_PTR
        context: isize,  // INT_PTR
        notification: *mut smiOID,  // smiOID* in/out
        state: u32  // SNMP_STATUS
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("wsnmp32.dll")]
public static extern uint SnmpRegister(IntPtr session, IntPtr srcEntity, IntPtr dstEntity, IntPtr context, IntPtr notification, uint state);
"@
$api = Add-Type -MemberDefinition $sig -Name 'wsnmp32_SnmpRegister' -Namespace Win32 -PassThru
# $api::SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
#uselib "wsnmp32.dll"
#func global SnmpRegister "SnmpRegister" sptr, sptr, sptr, sptr, sptr, sptr
; SnmpRegister session, srcEntity, dstEntity, context, varptr(notification), state   ; 戻り値は stat
; session : INT_PTR -> "sptr"
; srcEntity : INT_PTR -> "sptr"
; dstEntity : INT_PTR -> "sptr"
; context : INT_PTR -> "sptr"
; notification : smiOID* in/out -> "sptr"
; state : SNMP_STATUS -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "wsnmp32.dll"
#cfunc global SnmpRegister "SnmpRegister" sptr, sptr, sptr, sptr, var, int
; res = SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
; session : INT_PTR -> "sptr"
; srcEntity : INT_PTR -> "sptr"
; dstEntity : INT_PTR -> "sptr"
; context : INT_PTR -> "sptr"
; notification : smiOID* in/out -> "var"
; state : SNMP_STATUS -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD SnmpRegister(INT_PTR session, INT_PTR srcEntity, INT_PTR dstEntity, INT_PTR context, smiOID* notification, SNMP_STATUS state)
#uselib "wsnmp32.dll"
#cfunc global SnmpRegister "SnmpRegister" intptr, intptr, intptr, intptr, var, int
; res = SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
; session : INT_PTR -> "intptr"
; srcEntity : INT_PTR -> "intptr"
; dstEntity : INT_PTR -> "intptr"
; context : INT_PTR -> "intptr"
; notification : smiOID* in/out -> "var"
; state : SNMP_STATUS -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	wsnmp32 = windows.NewLazySystemDLL("wsnmp32.dll")
	procSnmpRegister = wsnmp32.NewProc("SnmpRegister")
)

// session (INT_PTR), srcEntity (INT_PTR), dstEntity (INT_PTR), context (INT_PTR), notification (smiOID* in/out), state (SNMP_STATUS)
r1, _, err := procSnmpRegister.Call(
	uintptr(session),
	uintptr(srcEntity),
	uintptr(dstEntity),
	uintptr(context),
	uintptr(notification),
	uintptr(state),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function SnmpRegister(
  session: NativeInt;   // INT_PTR
  srcEntity: NativeInt;   // INT_PTR
  dstEntity: NativeInt;   // INT_PTR
  context: NativeInt;   // INT_PTR
  notification: Pointer;   // smiOID* in/out
  state: DWORD   // SNMP_STATUS
): DWORD; stdcall;
  external 'wsnmp32.dll' name 'SnmpRegister';
result := DllCall("wsnmp32\SnmpRegister"
    , "Ptr", session   ; INT_PTR
    , "Ptr", srcEntity   ; INT_PTR
    , "Ptr", dstEntity   ; INT_PTR
    , "Ptr", context   ; INT_PTR
    , "Ptr", notification   ; smiOID* in/out
    , "UInt", state   ; SNMP_STATUS
    , "UInt")   ; return: DWORD
●SnmpRegister(session, srcEntity, dstEntity, context, notification, state) = DLL("wsnmp32.dll", "dword SnmpRegister(int, int, int, int, void*, dword)")
# 呼び出し: SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
# session : INT_PTR -> "int"
# srcEntity : INT_PTR -> "int"
# dstEntity : INT_PTR -> "int"
# context : INT_PTR -> "int"
# notification : smiOID* in/out -> "void*"
# state : SNMP_STATUS -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "wsnmp32" fn SnmpRegister(
    session: isize, // INT_PTR
    srcEntity: isize, // INT_PTR
    dstEntity: isize, // INT_PTR
    context: isize, // INT_PTR
    notification: [*c]smiOID, // smiOID* in/out
    state: u32 // SNMP_STATUS
) callconv(std.os.windows.WINAPI) u32;
proc SnmpRegister(
    session: int,  # INT_PTR
    srcEntity: int,  # INT_PTR
    dstEntity: int,  # INT_PTR
    context: int,  # INT_PTR
    notification: ptr smiOID,  # smiOID* in/out
    state: uint32  # SNMP_STATUS
): uint32 {.importc: "SnmpRegister", stdcall, dynlib: "wsnmp32.dll".}
pragma(lib, "wsnmp32");
extern(Windows)
uint SnmpRegister(
    ptrdiff_t session,   // INT_PTR
    ptrdiff_t srcEntity,   // INT_PTR
    ptrdiff_t dstEntity,   // INT_PTR
    ptrdiff_t context,   // INT_PTR
    smiOID* notification,   // smiOID* in/out
    uint state   // SNMP_STATUS
);
ccall((:SnmpRegister, "wsnmp32.dll"), stdcall, UInt32,
      (Int, Int, Int, Int, Ptr{smiOID}, UInt32),
      session, srcEntity, dstEntity, context, notification, state)
# session : INT_PTR -> Int
# srcEntity : INT_PTR -> Int
# dstEntity : INT_PTR -> Int
# context : INT_PTR -> Int
# notification : smiOID* in/out -> Ptr{smiOID}
# state : SNMP_STATUS -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
uint32_t SnmpRegister(
    intptr_t session,
    intptr_t srcEntity,
    intptr_t dstEntity,
    intptr_t context,
    void* notification,
    uint32_t state);
]]
local wsnmp32 = ffi.load("wsnmp32")
-- wsnmp32.SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
-- session : INT_PTR
-- srcEntity : INT_PTR
-- dstEntity : INT_PTR
-- context : INT_PTR
-- notification : smiOID* in/out
-- state : SNMP_STATUS
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('wsnmp32.dll');
const SnmpRegister = lib.func('__stdcall', 'SnmpRegister', 'uint32_t', ['intptr_t', 'intptr_t', 'intptr_t', 'intptr_t', 'void *', 'uint32_t']);
// SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
// session : INT_PTR -> 'intptr_t'
// srcEntity : INT_PTR -> 'intptr_t'
// dstEntity : INT_PTR -> 'intptr_t'
// context : INT_PTR -> 'intptr_t'
// notification : smiOID* in/out -> 'void *'
// state : SNMP_STATUS -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("wsnmp32.dll", {
  SnmpRegister: { parameters: ["isize", "isize", "isize", "isize", "pointer", "u32"], result: "u32" },
});
// lib.symbols.SnmpRegister(session, srcEntity, dstEntity, context, notification, state)
// session : INT_PTR -> "isize"
// srcEntity : INT_PTR -> "isize"
// dstEntity : INT_PTR -> "isize"
// context : INT_PTR -> "isize"
// notification : smiOID* in/out -> "pointer"
// state : SNMP_STATUS -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
uint32_t SnmpRegister(
    intptr_t session,
    intptr_t srcEntity,
    intptr_t dstEntity,
    intptr_t context,
    void* notification,
    uint32_t state);
C, "wsnmp32.dll");
// $ffi->SnmpRegister(session, srcEntity, dstEntity, context, notification, state);
// session : INT_PTR
// srcEntity : INT_PTR
// dstEntity : INT_PTR
// context : INT_PTR
// notification : smiOID* in/out
// state : SNMP_STATUS
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Wsnmp32 extends StdCallLibrary {
    Wsnmp32 INSTANCE = Native.load("wsnmp32", Wsnmp32.class);
    int SnmpRegister(
        long session,   // INT_PTR
        long srcEntity,   // INT_PTR
        long dstEntity,   // INT_PTR
        long context,   // INT_PTR
        Pointer notification,   // smiOID* in/out
        int state   // SNMP_STATUS
    );
}
@[Link("wsnmp32")]
lib Libwsnmp32
  fun SnmpRegister = SnmpRegister(
    session : LibC::SSizeT,   # INT_PTR
    srcEntity : LibC::SSizeT,   # INT_PTR
    dstEntity : LibC::SSizeT,   # INT_PTR
    context : LibC::SSizeT,   # INT_PTR
    notification : smiOID*,   # smiOID* in/out
    state : UInt32   # SNMP_STATUS
  ) : UInt32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef SnmpRegisterNative = Uint32 Function(IntPtr, IntPtr, IntPtr, IntPtr, Pointer<Void>, Uint32);
typedef SnmpRegisterDart = int Function(int, int, int, int, Pointer<Void>, int);
final SnmpRegister = DynamicLibrary.open('wsnmp32.dll')
    .lookupFunction<SnmpRegisterNative, SnmpRegisterDart>('SnmpRegister');
// session : INT_PTR -> IntPtr
// srcEntity : INT_PTR -> IntPtr
// dstEntity : INT_PTR -> IntPtr
// context : INT_PTR -> IntPtr
// notification : smiOID* in/out -> Pointer<Void>
// state : SNMP_STATUS -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function SnmpRegister(
  session: NativeInt;   // INT_PTR
  srcEntity: NativeInt;   // INT_PTR
  dstEntity: NativeInt;   // INT_PTR
  context: NativeInt;   // INT_PTR
  notification: Pointer;   // smiOID* in/out
  state: DWORD   // SNMP_STATUS
): DWORD; stdcall;
  external 'wsnmp32.dll' name 'SnmpRegister';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "SnmpRegister"
  c_SnmpRegister :: CIntPtr -> CIntPtr -> CIntPtr -> CIntPtr -> Ptr () -> Word32 -> IO Word32
-- session : INT_PTR -> CIntPtr
-- srcEntity : INT_PTR -> CIntPtr
-- dstEntity : INT_PTR -> CIntPtr
-- context : INT_PTR -> CIntPtr
-- notification : smiOID* in/out -> Ptr ()
-- state : SNMP_STATUS -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let snmpregister =
  foreign "SnmpRegister"
    (intptr_t @-> intptr_t @-> intptr_t @-> intptr_t @-> (ptr void) @-> uint32_t @-> returning uint32_t)
(* session : INT_PTR -> intptr_t *)
(* srcEntity : INT_PTR -> intptr_t *)
(* dstEntity : INT_PTR -> intptr_t *)
(* context : INT_PTR -> intptr_t *)
(* notification : smiOID* in/out -> (ptr void) *)
(* state : SNMP_STATUS -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library wsnmp32 (t "wsnmp32.dll"))
(cffi:use-foreign-library wsnmp32)

(cffi:defcfun ("SnmpRegister" snmp-register :convention :stdcall) :uint32
  (session :int64)   ; INT_PTR
  (src-entity :int64)   ; INT_PTR
  (dst-entity :int64)   ; INT_PTR
  (context :int64)   ; INT_PTR
  (notification :pointer)   ; smiOID* in/out
  (state :uint32))   ; SNMP_STATUS
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $SnmpRegister = Win32::API::More->new('wsnmp32',
    'DWORD SnmpRegister(LPARAM session, LPARAM srcEntity, LPARAM dstEntity, LPARAM context, LPVOID notification, DWORD state)');
# my $ret = $SnmpRegister->Call($session, $srcEntity, $dstEntity, $context, $notification, $state);
# session : INT_PTR -> LPARAM
# srcEntity : INT_PTR -> LPARAM
# dstEntity : INT_PTR -> LPARAM
# context : INT_PTR -> LPARAM
# notification : smiOID* in/out -> LPVOID
# state : SNMP_STATUS -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目
使用する型