DRMBOUNDLICENSEPARAMS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| uVersion | DWORD | 4 | +0 | +0 | 構造体のバージョンを指定します。このメンバーは DRMBOUNDLICENSEPARAMSVERSION に設定する必要があります。 |
| hEnablingPrincipal | DWORD | 4 | +4 | +4 | バインドするエンドユーザー ライセンス内の有効化プリンシパルへのハンドルです。このハンドルは DRMCreateEnablingPrincipal 関数を使用して作成します。このメンバーの既定値は NULL です。NULL を指定した場合、アプリケーションはライセンス内の最初のプリンシパルにバインドします。 |
| hSecureStore | DWORD | 4 | +8 | +8 | 将来の使用のために予約されています。このメンバーは NULL に設定する必要があります。 |
| wszRightsRequested | LPWSTR | 8/4 | +16 | +12 | 要求する権利のコンマ区切りリストを含む、null で終わる Unicode 文字列へのポインターです。このメンバーは NULL にすることはできず、文字列には EDIT や OWNER などの有効な権利が含まれていなければなりません。 |
| wszRightsGroup | LPWSTR | 8/4 | +24 | +16 | ライセンスで使用する権利グループの名前を含む、null で終わる Unicode 文字列へのポインターです。詳細については「解説」を参照してください。使用しない場合、このメンバーは NULL に設定できます。 |
| idResource | DRMID | 24/12 | +32 | +20 | バインドしようとしているコンテンツを識別する DRMID 構造体です。この構造体の wszID および wszIDType パラメーターには、DRMSetMetaData 関数の wszContentId および wszContentIdType パラメーターにそれぞれ指定した値を設定する必要があります。値が NULL の場合、または DRMSetMetaData の対応する値と一致しない場合、DRMCreateBoundLicense 関数はエラーを返します。 |
| cAuthenticatorCount | DWORD | 4 | +56 | +32 | 将来の使用のために予約されています。このメンバーは 0 に設定する必要があります。 |
| rghAuthenticators | DWORD* | 8/4 | +64 | +36 | 将来の使用のために予約されています。このメンバーは NULL に設定する必要があります。 |
| wszDefaultEnablingPrincipalCredentials | LPWSTR | 8/4 | +72 | +40 | 有効化プリンシパルの証明書 (権利アカウント証明書) を含む、null で終わる Unicode 文字列へのポインターです。使用しない場合、このメンバーは NULL に設定できます。 |
| dwFlags | DWORD | 4 | +80 | +44 | 省略可能です。追加設定用のフラグを含みます。このメンバーには 0 または次の値を指定できます。 DRMBINDINGFLAGS_IGNORE_VALIDITY_INTERVALS通常、エンドユーザー ライセンスの証明書チェーンの有効期限が切れている場合、バインドは失敗します。ただし、このフラグを渡し、ユーザーの権利アカウント証明書およびマシン証明書が有効で、その他のライセンス要件もすべて有効であれば、バインドは成功します。この場合、アプリケーションはコンテンツを検証できないこと、およびコンテンツはユーザーの責任で開かれることをユーザーに警告する必要があります。 |
公式ドキュメント
Msdrm.dll のクライアントによって公開される機能を利用する AD RMS SDK は、Windows Server 2008、Windows Vista、Windows Server 2008 R2、Windows 7、Windows Server 2012、および Windows 8 で使用できます。以降のバージョンでは変更されるか、利用できなくなる可能性があります。代わりに、Msipc.dll のクライアントによって公開される機能を利用する Active Directory Rights Management Services SDK 2.1 を使用してください。
DRMBOUNDLICENSEPARAMS 構造体は、DRMCreateBoundLicense がライセンスへのバインドに使用します。
解説(Remarks)
C++ アプリケーションでは、この構造体には既定のコンストラクターがあり、メンバーを次の値に初期化します。
uVersion = DRMBOUNDLICENSEPARAMSVERSION
hEnablingPrincipal = NULL
hSecureStore = NULL
wszRightsRequested = NULL
wszRightsGroup = NULL
cAuthenticatorCount = 0
rghAuthenticators = NULL
wszDefaultEnablingPrincipalCredentials = NULL
idResource.uVersion = DRMIDVERSION
idResource.wszIDType = NULL
idResource.wszID = NULL
dwFlags = 0
エンドユーザー ライセンスに複数の権利グループが含まれている場合は、wszRightsGroup パラメーターで使用する権利グループの名前を指定します。既定では、エンドユーザー ライセンス内で最初に見つかった権利グループが選択されます。要求した権利のいずれかが付与されていない場合、バインド要求 (DRMCreateBoundLicense) は失敗します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DRMID (x64 24 / x86 12 バイト)
typedef struct DRMID {
DWORD uVersion;
LPWSTR wszIDType;
LPWSTR wszID;
} DRMID;
// DRMBOUNDLICENSEPARAMS (x64 88 / x86 48 バイト)
typedef struct DRMBOUNDLICENSEPARAMS {
DWORD uVersion;
DWORD hEnablingPrincipal;
DWORD hSecureStore;
LPWSTR wszRightsRequested;
LPWSTR wszRightsGroup;
DRMID idResource;
DWORD cAuthenticatorCount;
DWORD* rghAuthenticators;
LPWSTR wszDefaultEnablingPrincipalCredentials;
DWORD dwFlags;
} DRMBOUNDLICENSEPARAMS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRMID
{
public uint uVersion;
public IntPtr wszIDType;
public IntPtr wszID;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRMBOUNDLICENSEPARAMS
{
public uint uVersion;
public uint hEnablingPrincipal;
public uint hSecureStore;
public IntPtr wszRightsRequested;
public IntPtr wszRightsGroup;
public DRMID idResource;
public uint cAuthenticatorCount;
public IntPtr rghAuthenticators;
public IntPtr wszDefaultEnablingPrincipalCredentials;
public uint dwFlags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRMID
Public uVersion As UInteger
Public wszIDType As IntPtr
Public wszID As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRMBOUNDLICENSEPARAMS
Public uVersion As UInteger
Public hEnablingPrincipal As UInteger
Public hSecureStore As UInteger
Public wszRightsRequested As IntPtr
Public wszRightsGroup As IntPtr
Public idResource As DRMID
Public cAuthenticatorCount As UInteger
Public rghAuthenticators As IntPtr
Public wszDefaultEnablingPrincipalCredentials As IntPtr
Public dwFlags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DRMID(ctypes.Structure):
_fields_ = [
("uVersion", wintypes.DWORD),
("wszIDType", ctypes.c_void_p),
("wszID", ctypes.c_void_p),
]
class DRMBOUNDLICENSEPARAMS(ctypes.Structure):
_fields_ = [
("uVersion", wintypes.DWORD),
("hEnablingPrincipal", wintypes.DWORD),
("hSecureStore", wintypes.DWORD),
("wszRightsRequested", ctypes.c_void_p),
("wszRightsGroup", ctypes.c_void_p),
("idResource", DRMID),
("cAuthenticatorCount", wintypes.DWORD),
("rghAuthenticators", ctypes.c_void_p),
("wszDefaultEnablingPrincipalCredentials", ctypes.c_void_p),
("dwFlags", wintypes.DWORD),
]#[repr(C)]
pub struct DRMID {
pub uVersion: u32,
pub wszIDType: *mut core::ffi::c_void,
pub wszID: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct DRMBOUNDLICENSEPARAMS {
pub uVersion: u32,
pub hEnablingPrincipal: u32,
pub hSecureStore: u32,
pub wszRightsRequested: *mut core::ffi::c_void,
pub wszRightsGroup: *mut core::ffi::c_void,
pub idResource: DRMID,
pub cAuthenticatorCount: u32,
pub rghAuthenticators: *mut core::ffi::c_void,
pub wszDefaultEnablingPrincipalCredentials: *mut core::ffi::c_void,
pub dwFlags: u32,
}import "golang.org/x/sys/windows"
type DRMID struct {
uVersion uint32
wszIDType uintptr
wszID uintptr
}
type DRMBOUNDLICENSEPARAMS struct {
uVersion uint32
hEnablingPrincipal uint32
hSecureStore uint32
wszRightsRequested uintptr
wszRightsGroup uintptr
idResource DRMID
cAuthenticatorCount uint32
rghAuthenticators uintptr
wszDefaultEnablingPrincipalCredentials uintptr
dwFlags uint32
}type
DRMID = record
uVersion: DWORD;
wszIDType: Pointer;
wszID: Pointer;
end;
DRMBOUNDLICENSEPARAMS = record
uVersion: DWORD;
hEnablingPrincipal: DWORD;
hSecureStore: DWORD;
wszRightsRequested: Pointer;
wszRightsGroup: Pointer;
idResource: DRMID;
cAuthenticatorCount: DWORD;
rghAuthenticators: Pointer;
wszDefaultEnablingPrincipalCredentials: Pointer;
dwFlags: DWORD;
end;const DRMID = extern struct {
uVersion: u32,
wszIDType: ?*anyopaque,
wszID: ?*anyopaque,
};
const DRMBOUNDLICENSEPARAMS = extern struct {
uVersion: u32,
hEnablingPrincipal: u32,
hSecureStore: u32,
wszRightsRequested: ?*anyopaque,
wszRightsGroup: ?*anyopaque,
idResource: DRMID,
cAuthenticatorCount: u32,
rghAuthenticators: ?*anyopaque,
wszDefaultEnablingPrincipalCredentials: ?*anyopaque,
dwFlags: u32,
};type
DRMID {.bycopy.} = object
uVersion: uint32
wszIDType: pointer
wszID: pointer
DRMBOUNDLICENSEPARAMS {.bycopy.} = object
uVersion: uint32
hEnablingPrincipal: uint32
hSecureStore: uint32
wszRightsRequested: pointer
wszRightsGroup: pointer
idResource: DRMID
cAuthenticatorCount: uint32
rghAuthenticators: pointer
wszDefaultEnablingPrincipalCredentials: pointer
dwFlags: uint32struct DRMID
{
uint uVersion;
void* wszIDType;
void* wszID;
}
struct DRMBOUNDLICENSEPARAMS
{
uint uVersion;
uint hEnablingPrincipal;
uint hSecureStore;
void* wszRightsRequested;
void* wszRightsGroup;
DRMID idResource;
uint cAuthenticatorCount;
void* rghAuthenticators;
void* wszDefaultEnablingPrincipalCredentials;
uint dwFlags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DRMBOUNDLICENSEPARAMS サイズ: 48 バイト(x86)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; uVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hEnablingPrincipal : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hSecureStore : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; wszRightsRequested : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; wszRightsGroup : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; idResource : DRMID (+20, 12byte) varptr(st)+20 を基点に操作(12byte:入れ子/配列)
; cAuthenticatorCount : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; rghAuthenticators : DWORD* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; wszDefaultEnablingPrincipalCredentials : LPWSTR (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; dwFlags : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DRMBOUNDLICENSEPARAMS サイズ: 88 バイト(x64)
dim st, 22 ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; uVersion : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hEnablingPrincipal : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hSecureStore : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; wszRightsRequested : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; wszRightsGroup : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; idResource : DRMID (+32, 24byte) varptr(st)+32 を基点に操作(24byte:入れ子/配列)
; cAuthenticatorCount : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; rghAuthenticators : DWORD* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; wszDefaultEnablingPrincipalCredentials : LPWSTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; dwFlags : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DRMID
#field int uVersion
#field intptr wszIDType
#field intptr wszID
#endstruct
#defstruct global DRMBOUNDLICENSEPARAMS
#field int uVersion
#field int hEnablingPrincipal
#field int hSecureStore
#field intptr wszRightsRequested
#field intptr wszRightsGroup
#field DRMID idResource
#field int cAuthenticatorCount
#field intptr rghAuthenticators
#field intptr wszDefaultEnablingPrincipalCredentials
#field int dwFlags
#endstruct
stdim st, DRMBOUNDLICENSEPARAMS ; NSTRUCT 変数を確保
st->uVersion = 100
mes "uVersion=" + st->uVersion