Win32 API 日本語リファレンス
ホーム › Data.RightsManagement › DRMGetRightInfo

DRMGetRightInfo

関数
RMS権利の名前と有効期間を取得する。
DLLmsdrm.dll呼出規約winapi

シグネチャ

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

HRESULT DRMGetRightInfo(
    DWORD hRight,
    DWORD* puRightNameLength,
    LPWSTR wszRightName,   // optional
    SYSTEMTIME* pstFrom,
    SYSTEMTIME* pstUntil
);

パラメーター

名前型方向説明
hRightDWORDin情報を取得する対象の right のハンドル。
puRightNameLengthDWORD*inout

UINT 値へのポインター。呼び出し時には、wszRightName バッファーの長さを文字数で指定します。この長さには終端の null 文字を含める必要があります。

関数から制御が返ると、この値には wszRightName バッファーにコピーされた文字数 (終端の null 文字を含む) が格納されます。

wszRightNameLPWSTRoutoptional

right の名前を受け取る、null で終わる Unicode 文字列へのポインター。このバッファーのサイズは puRightNameLength パラメーターで指定します。この情報が不要な場合は、このパラメーターに NULL を設定します。

このバッファーに必要なサイズを調べるには、このパラメーターに NULL を渡します。関数は、終端の null 文字を含む必要なサイズを文字数で puRightNameLength の値に格納します。

pstFromSYSTEMTIME*inoutright の有効期間の開始日時を UTC 時刻で受け取る SYSTEMTIME 構造体へのポインター。この情報が不要な場合は、このパラメーターに NULL を設定します。
pstUntilSYSTEMTIME*inoutright の有効期間の終了日時を UTC 時刻で受け取る SYSTEMTIME 構造体へのポインター。この情報が不要な場合は、このパラメーターに NULL を設定します。

戻り値の型: HRESULT

公式ドキュメント

以前に作成された right (権利) に関する情報を取得します。

戻り値

関数が成功した場合、S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。返される可能性のある値には、次の一覧に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、「Common HRESULT Values」を参照してください。

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

各言語での呼び出し定義

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

HRESULT DRMGetRightInfo(
    DWORD hRight,
    DWORD* puRightNameLength,
    LPWSTR wszRightName,   // optional
    SYSTEMTIME* pstFrom,
    SYSTEMTIME* pstUntil
);
[DllImport("msdrm.dll", ExactSpelling = true)]
static extern int DRMGetRightInfo(
    uint hRight,   // DWORD
    ref uint puRightNameLength,   // DWORD* in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder wszRightName,   // LPWSTR optional, out
    IntPtr pstFrom,   // SYSTEMTIME* in/out
    IntPtr pstUntil   // SYSTEMTIME* in/out
);
<DllImport("msdrm.dll", ExactSpelling:=True)>
Public Shared Function DRMGetRightInfo(
    hRight As UInteger,   ' DWORD
    ByRef puRightNameLength As UInteger,   ' DWORD* in/out
    <MarshalAs(UnmanagedType.LPWStr)> wszRightName As System.Text.StringBuilder,   ' LPWSTR optional, out
    pstFrom As IntPtr,   ' SYSTEMTIME* in/out
    pstUntil As IntPtr   ' SYSTEMTIME* in/out
) As Integer
End Function
' hRight : DWORD
' puRightNameLength : DWORD* in/out
' wszRightName : LPWSTR optional, out
' pstFrom : SYSTEMTIME* in/out
' pstUntil : SYSTEMTIME* in/out
Declare PtrSafe Function DRMGetRightInfo Lib "msdrm" ( _
    ByVal hRight As Long, _
    ByRef puRightNameLength As Long, _
    ByVal wszRightName As LongPtr, _
    ByVal pstFrom As LongPtr, _
    ByVal pstUntil As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

DRMGetRightInfo = ctypes.windll.msdrm.DRMGetRightInfo
DRMGetRightInfo.restype = ctypes.c_int
DRMGetRightInfo.argtypes = [
    wintypes.DWORD,  # hRight : DWORD
    ctypes.POINTER(wintypes.DWORD),  # puRightNameLength : DWORD* in/out
    wintypes.LPWSTR,  # wszRightName : LPWSTR optional, out
    ctypes.c_void_p,  # pstFrom : SYSTEMTIME* in/out
    ctypes.c_void_p,  # pstUntil : SYSTEMTIME* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('msdrm.dll')
DRMGetRightInfo = Fiddle::Function.new(
  lib['DRMGetRightInfo'],
  [
    -Fiddle::TYPE_INT,  # hRight : DWORD
    Fiddle::TYPE_VOIDP,  # puRightNameLength : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # wszRightName : LPWSTR optional, out
    Fiddle::TYPE_VOIDP,  # pstFrom : SYSTEMTIME* in/out
    Fiddle::TYPE_VOIDP,  # pstUntil : SYSTEMTIME* in/out
  ],
  Fiddle::TYPE_INT)
#[link(name = "msdrm")]
extern "system" {
    fn DRMGetRightInfo(
        hRight: u32,  // DWORD
        puRightNameLength: *mut u32,  // DWORD* in/out
        wszRightName: *mut u16,  // LPWSTR optional, out
        pstFrom: *mut SYSTEMTIME,  // SYSTEMTIME* in/out
        pstUntil: *mut SYSTEMTIME  // SYSTEMTIME* in/out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("msdrm.dll")]
public static extern int DRMGetRightInfo(uint hRight, ref uint puRightNameLength, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder wszRightName, IntPtr pstFrom, IntPtr pstUntil);
"@
$api = Add-Type -MemberDefinition $sig -Name 'msdrm_DRMGetRightInfo' -Namespace Win32 -PassThru
# $api::DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
#uselib "msdrm.dll"
#func global DRMGetRightInfo "DRMGetRightInfo" sptr, sptr, sptr, sptr, sptr
; DRMGetRightInfo hRight, varptr(puRightNameLength), varptr(wszRightName), varptr(pstFrom), varptr(pstUntil)   ; 戻り値は stat
; hRight : DWORD -> "sptr"
; puRightNameLength : DWORD* in/out -> "sptr"
; wszRightName : LPWSTR optional, out -> "sptr"
; pstFrom : SYSTEMTIME* in/out -> "sptr"
; pstUntil : SYSTEMTIME* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "msdrm.dll"
#cfunc global DRMGetRightInfo "DRMGetRightInfo" int, var, var, var, var
; res = DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
; hRight : DWORD -> "int"
; puRightNameLength : DWORD* in/out -> "var"
; wszRightName : LPWSTR optional, out -> "var"
; pstFrom : SYSTEMTIME* in/out -> "var"
; pstUntil : SYSTEMTIME* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT DRMGetRightInfo(DWORD hRight, DWORD* puRightNameLength, LPWSTR wszRightName, SYSTEMTIME* pstFrom, SYSTEMTIME* pstUntil)
#uselib "msdrm.dll"
#cfunc global DRMGetRightInfo "DRMGetRightInfo" int, var, var, var, var
; res = DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
; hRight : DWORD -> "int"
; puRightNameLength : DWORD* in/out -> "var"
; wszRightName : LPWSTR optional, out -> "var"
; pstFrom : SYSTEMTIME* in/out -> "var"
; pstUntil : SYSTEMTIME* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	msdrm = windows.NewLazySystemDLL("msdrm.dll")
	procDRMGetRightInfo = msdrm.NewProc("DRMGetRightInfo")
)

// hRight (DWORD), puRightNameLength (DWORD* in/out), wszRightName (LPWSTR optional, out), pstFrom (SYSTEMTIME* in/out), pstUntil (SYSTEMTIME* in/out)
r1, _, err := procDRMGetRightInfo.Call(
	uintptr(hRight),
	uintptr(puRightNameLength),
	uintptr(wszRightName),
	uintptr(pstFrom),
	uintptr(pstUntil),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function DRMGetRightInfo(
  hRight: DWORD;   // DWORD
  puRightNameLength: Pointer;   // DWORD* in/out
  wszRightName: PWideChar;   // LPWSTR optional, out
  pstFrom: Pointer;   // SYSTEMTIME* in/out
  pstUntil: Pointer   // SYSTEMTIME* in/out
): Integer; stdcall;
  external 'msdrm.dll' name 'DRMGetRightInfo';
result := DllCall("msdrm\DRMGetRightInfo"
    , "UInt", hRight   ; DWORD
    , "Ptr", puRightNameLength   ; DWORD* in/out
    , "Ptr", wszRightName   ; LPWSTR optional, out
    , "Ptr", pstFrom   ; SYSTEMTIME* in/out
    , "Ptr", pstUntil   ; SYSTEMTIME* in/out
    , "Int")   ; return: HRESULT
●DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil) = DLL("msdrm.dll", "int DRMGetRightInfo(dword, void*, char*, void*, void*)")
# 呼び出し: DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
# hRight : DWORD -> "dword"
# puRightNameLength : DWORD* in/out -> "void*"
# wszRightName : LPWSTR optional, out -> "char*"
# pstFrom : SYSTEMTIME* in/out -> "void*"
# pstUntil : SYSTEMTIME* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "msdrm" fn DRMGetRightInfo(
    hRight: u32, // DWORD
    puRightNameLength: [*c]u32, // DWORD* in/out
    wszRightName: [*c]u16, // LPWSTR optional, out
    pstFrom: [*c]SYSTEMTIME, // SYSTEMTIME* in/out
    pstUntil: [*c]SYSTEMTIME // SYSTEMTIME* in/out
) callconv(std.os.windows.WINAPI) i32;
proc DRMGetRightInfo(
    hRight: uint32,  # DWORD
    puRightNameLength: ptr uint32,  # DWORD* in/out
    wszRightName: ptr uint16,  # LPWSTR optional, out
    pstFrom: ptr SYSTEMTIME,  # SYSTEMTIME* in/out
    pstUntil: ptr SYSTEMTIME  # SYSTEMTIME* in/out
): int32 {.importc: "DRMGetRightInfo", stdcall, dynlib: "msdrm.dll".}
pragma(lib, "msdrm");
extern(Windows)
int DRMGetRightInfo(
    uint hRight,   // DWORD
    uint* puRightNameLength,   // DWORD* in/out
    wchar* wszRightName,   // LPWSTR optional, out
    SYSTEMTIME* pstFrom,   // SYSTEMTIME* in/out
    SYSTEMTIME* pstUntil   // SYSTEMTIME* in/out
);
ccall((:DRMGetRightInfo, "msdrm.dll"), stdcall, Int32,
      (UInt32, Ptr{UInt32}, Ptr{UInt16}, Ptr{SYSTEMTIME}, Ptr{SYSTEMTIME}),
      hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
# hRight : DWORD -> UInt32
# puRightNameLength : DWORD* in/out -> Ptr{UInt32}
# wszRightName : LPWSTR optional, out -> Ptr{UInt16}
# pstFrom : SYSTEMTIME* in/out -> Ptr{SYSTEMTIME}
# pstUntil : SYSTEMTIME* in/out -> Ptr{SYSTEMTIME}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t DRMGetRightInfo(
    uint32_t hRight,
    uint32_t* puRightNameLength,
    uint16_t* wszRightName,
    void* pstFrom,
    void* pstUntil);
]]
local msdrm = ffi.load("msdrm")
-- msdrm.DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
-- hRight : DWORD
-- puRightNameLength : DWORD* in/out
-- wszRightName : LPWSTR optional, out
-- pstFrom : SYSTEMTIME* in/out
-- pstUntil : SYSTEMTIME* in/out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('msdrm.dll');
const DRMGetRightInfo = lib.func('__stdcall', 'DRMGetRightInfo', 'int32_t', ['uint32_t', 'uint32_t *', 'uint16_t *', 'void *', 'void *']);
// DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
// hRight : DWORD -> 'uint32_t'
// puRightNameLength : DWORD* in/out -> 'uint32_t *'
// wszRightName : LPWSTR optional, out -> 'uint16_t *'
// pstFrom : SYSTEMTIME* in/out -> 'void *'
// pstUntil : SYSTEMTIME* in/out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("msdrm.dll", {
  DRMGetRightInfo: { parameters: ["u32", "pointer", "buffer", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil)
// hRight : DWORD -> "u32"
// puRightNameLength : DWORD* in/out -> "pointer"
// wszRightName : LPWSTR optional, out -> "buffer"
// pstFrom : SYSTEMTIME* in/out -> "pointer"
// pstUntil : SYSTEMTIME* in/out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t DRMGetRightInfo(
    uint32_t hRight,
    uint32_t* puRightNameLength,
    uint16_t* wszRightName,
    void* pstFrom,
    void* pstUntil);
C, "msdrm.dll");
// $ffi->DRMGetRightInfo(hRight, puRightNameLength, wszRightName, pstFrom, pstUntil);
// hRight : DWORD
// puRightNameLength : DWORD* in/out
// wszRightName : LPWSTR optional, out
// pstFrom : SYSTEMTIME* in/out
// pstUntil : SYSTEMTIME* in/out
// 構造体/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 Msdrm extends StdCallLibrary {
    Msdrm INSTANCE = Native.load("msdrm", Msdrm.class);
    int DRMGetRightInfo(
        int hRight,   // DWORD
        IntByReference puRightNameLength,   // DWORD* in/out
        char[] wszRightName,   // LPWSTR optional, out
        Pointer pstFrom,   // SYSTEMTIME* in/out
        Pointer pstUntil   // SYSTEMTIME* in/out
    );
}
@[Link("msdrm")]
lib Libmsdrm
  fun DRMGetRightInfo = DRMGetRightInfo(
    hRight : UInt32,   # DWORD
    puRightNameLength : UInt32*,   # DWORD* in/out
    wszRightName : UInt16*,   # LPWSTR optional, out
    pstFrom : SYSTEMTIME*,   # SYSTEMTIME* in/out
    pstUntil : SYSTEMTIME*   # SYSTEMTIME* in/out
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef DRMGetRightInfoNative = Int32 Function(Uint32, Pointer<Uint32>, Pointer<Utf16>, Pointer<Void>, Pointer<Void>);
typedef DRMGetRightInfoDart = int Function(int, Pointer<Uint32>, Pointer<Utf16>, Pointer<Void>, Pointer<Void>);
final DRMGetRightInfo = DynamicLibrary.open('msdrm.dll')
    .lookupFunction<DRMGetRightInfoNative, DRMGetRightInfoDart>('DRMGetRightInfo');
// hRight : DWORD -> Uint32
// puRightNameLength : DWORD* in/out -> Pointer<Uint32>
// wszRightName : LPWSTR optional, out -> Pointer<Utf16>
// pstFrom : SYSTEMTIME* in/out -> Pointer<Void>
// pstUntil : SYSTEMTIME* in/out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function DRMGetRightInfo(
  hRight: DWORD;   // DWORD
  puRightNameLength: Pointer;   // DWORD* in/out
  wszRightName: PWideChar;   // LPWSTR optional, out
  pstFrom: Pointer;   // SYSTEMTIME* in/out
  pstUntil: Pointer   // SYSTEMTIME* in/out
): Integer; stdcall;
  external 'msdrm.dll' name 'DRMGetRightInfo';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "DRMGetRightInfo"
  c_DRMGetRightInfo :: Word32 -> Ptr Word32 -> CWString -> Ptr () -> Ptr () -> IO Int32
-- hRight : DWORD -> Word32
-- puRightNameLength : DWORD* in/out -> Ptr Word32
-- wszRightName : LPWSTR optional, out -> CWString
-- pstFrom : SYSTEMTIME* in/out -> Ptr ()
-- pstUntil : SYSTEMTIME* in/out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let drmgetrightinfo =
  foreign "DRMGetRightInfo"
    (uint32_t @-> (ptr uint32_t) @-> (ptr uint16_t) @-> (ptr void) @-> (ptr void) @-> returning int32_t)
(* hRight : DWORD -> uint32_t *)
(* puRightNameLength : DWORD* in/out -> (ptr uint32_t) *)
(* wszRightName : LPWSTR optional, out -> (ptr uint16_t) *)
(* pstFrom : SYSTEMTIME* in/out -> (ptr void) *)
(* pstUntil : SYSTEMTIME* in/out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library msdrm (t "msdrm.dll"))
(cffi:use-foreign-library msdrm)

(cffi:defcfun ("DRMGetRightInfo" drmget-right-info :convention :stdcall) :int32
  (h-right :uint32)   ; DWORD
  (pu-right-name-length :pointer)   ; DWORD* in/out
  (wsz-right-name :pointer)   ; LPWSTR optional, out
  (pst-from :pointer)   ; SYSTEMTIME* in/out
  (pst-until :pointer))   ; SYSTEMTIME* in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $DRMGetRightInfo = Win32::API::More->new('msdrm',
    'int DRMGetRightInfo(DWORD hRight, LPVOID puRightNameLength, LPWSTR wszRightName, LPVOID pstFrom, LPVOID pstUntil)');
# my $ret = $DRMGetRightInfo->Call($hRight, $puRightNameLength, $wszRightName, $pstFrom, $pstUntil);
# hRight : DWORD -> DWORD
# puRightNameLength : DWORD* in/out -> LPVOID
# wszRightName : LPWSTR optional, out -> LPWSTR
# pstFrom : SYSTEMTIME* in/out -> LPVOID
# pstUntil : SYSTEMTIME* in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

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