MFP_ACQUIRE_USER_CREDENTIAL_EVENT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| header | MFP_EVENT_HEADER | 32/20 | +0 | +0 | すべての IMFPMediaPlayer イベントに共通するデータを格納する MFP_EVENT_HEADER 構造体です。 |
| dwUserData | UINT_PTR | 8/4 | +32 | +20 | メディア項目に対するアプリケーション定義のユーザーデータです。この値は、アプリケーションがメディア項目を作成するために IMFPMediaPlayer::CreateMediaItemFromURL または IMFPMediaPlayer::CreateMediaItemFromObject を呼び出すときに指定します。 このイベントは、送信される場合、メディア項目が作成される前、かつアプリケーションが MFP_EVENT_TYPE_MEDIAITEM_CREATED イベントを受け取る前に送信されます。dwUserData の値を使用して、どのメディア項目が認証を必要としているかを識別できます。 |
| fProceedWithAuthentication | BOOL | 4 | +40 | +24 | アプリケーションは、IMFPMediaPlayerCallback::OnMediaPlayerEvent イベントコールバックから戻る前に、このメンバーに TRUE または FALSE のいずれかを設定する必要があります。 コールバックから戻るときにこの値が TRUE であれば、MFPlay は認証の試行を続行します。そうでない場合、認証は失敗します。 |
| hrAuthenticationStatus | HRESULT | 4 | +44 | +28 | 認証チャレンジの応答コードです。 |
| pwszURL | LPWSTR | 8/4 | +48 | +32 | 認証を必要とする元の URL です。 |
| pwszSite | LPWSTR | 8/4 | +56 | +36 | 認証を必要とするサイトまたはプロキシの名前です。 |
| pwszRealm | LPWSTR | 8/4 | +64 | +40 | この認証のレルムの名前です。 |
| pwszPackage | LPWSTR | 8/4 | +72 | +44 | 認証パッケージの名前です ("Digest" や "MBS_BASIC" など)。 |
| nRetries | INT | 4 | +80 | +48 | 再試行の回数です。このメンバーは最初の試行では 0 に設定され、以降の試行ごとに 1 ずつ増加します。 |
| flags | DWORD | 4 | +84 | +52 | _MFP_CREDENTIAL_FLAGS 列挙型の 0 個以上のフラグのビット単位の OR です。 |
| pCredential | IMFNetCredential* | 8/4 | +88 | +56 | IMFNetCredential インターフェイスへのポインターです。アプリケーションはこのインターフェイスを使用してユーザーの資格情報を設定します。 |
公式ドキュメント
[このページに関連する機能である MFPlay はレガシー機能です。MediaPlayer および IMFMediaEngine に置き換えられました。これらの機能は Windows 10 および Windows 11 向けに最適化されています。Microsoft は、可能な限り新しいコードで DirectShow ではなく MediaPlayer および IMFMediaEngine を使用することを強く推奨します。レガシー API を使用している既存のコードについても、可能であれば新しい API を使用するように書き直すことを推奨します。]
MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL イベントのイベント構造体です。このイベントは、アプリケーションが認証を必要とするサーバー上のメディアファイルを再生する場合に送信されます。アプリケーションはユーザー資格情報を提供することで応答できます。
解説(Remarks)
この構造体へのポインターを取得するには、IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドの pEventHeader パラメーターをキャストします。 この目的には MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT マクロを使用できます。
flags メンバーに MFP_CREDENTIAL_PROMPT フラグが含まれている場合、アプリケーションは次の処理を行う必要があります。
- ユーザー名とパスワードの入力をユーザーに求めます。
- pCredential ポインターに対して IMFNetCredential::SetUser を呼び出し、ユーザー名を資格情報オブジェクトに格納します。
- pCredential ポインターに対して IMFNetCredential::SetPassword を呼び出し、パスワードを格納します。
既定では、MFPlay はネットワークソースが実装する IMFNetCredentialManager を使用して資格情報を管理します。アプリケーションは、次の手順で独自のこのインターフェイスの実装を提供できます。
- IMFPMediaPlayer ポインターに対して QueryInterface を呼び出し、IPropertyStore インターフェイスを取得します。
- IPropertyStore::SetValue を呼び出して MFNETSOURCE_CREDENTIAL_MANAGER プロパティを設定します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// MFP_EVENT_HEADER (x64 32 / x86 20 バイト)
typedef struct MFP_EVENT_HEADER {
MFP_EVENT_TYPE eEventType;
HRESULT hrEvent;
IMFPMediaPlayer* pMediaPlayer;
MFP_MEDIAPLAYER_STATE eState;
IPropertyStore* pPropertyStore;
} MFP_EVENT_HEADER;
// MFP_ACQUIRE_USER_CREDENTIAL_EVENT (x64 96 / x86 60 バイト)
typedef struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT {
MFP_EVENT_HEADER header;
UINT_PTR dwUserData;
BOOL fProceedWithAuthentication;
HRESULT hrAuthenticationStatus;
LPWSTR pwszURL;
LPWSTR pwszSite;
LPWSTR pwszRealm;
LPWSTR pwszPackage;
INT nRetries;
DWORD flags;
IMFNetCredential* pCredential;
} MFP_ACQUIRE_USER_CREDENTIAL_EVENT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MFP_EVENT_HEADER
{
public int eEventType;
public int hrEvent;
public IntPtr pMediaPlayer;
public int eState;
public IntPtr pPropertyStore;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT
{
public MFP_EVENT_HEADER header;
public UIntPtr dwUserData;
[MarshalAs(UnmanagedType.Bool)] public bool fProceedWithAuthentication;
public int hrAuthenticationStatus;
public IntPtr pwszURL;
public IntPtr pwszSite;
public IntPtr pwszRealm;
public IntPtr pwszPackage;
public int nRetries;
public uint flags;
public IntPtr pCredential;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MFP_EVENT_HEADER
Public eEventType As Integer
Public hrEvent As Integer
Public pMediaPlayer As IntPtr
Public eState As Integer
Public pPropertyStore As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MFP_ACQUIRE_USER_CREDENTIAL_EVENT
Public header As MFP_EVENT_HEADER
Public dwUserData As UIntPtr
<MarshalAs(UnmanagedType.Bool)> Public fProceedWithAuthentication As Boolean
Public hrAuthenticationStatus As Integer
Public pwszURL As IntPtr
Public pwszSite As IntPtr
Public pwszRealm As IntPtr
Public pwszPackage As IntPtr
Public nRetries As Integer
Public flags As UInteger
Public pCredential As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class MFP_EVENT_HEADER(ctypes.Structure):
_fields_ = [
("eEventType", ctypes.c_int),
("hrEvent", ctypes.c_int),
("pMediaPlayer", ctypes.c_void_p),
("eState", ctypes.c_int),
("pPropertyStore", ctypes.c_void_p),
]
class MFP_ACQUIRE_USER_CREDENTIAL_EVENT(ctypes.Structure):
_fields_ = [
("header", MFP_EVENT_HEADER),
("dwUserData", ctypes.c_size_t),
("fProceedWithAuthentication", wintypes.BOOL),
("hrAuthenticationStatus", ctypes.c_int),
("pwszURL", ctypes.c_void_p),
("pwszSite", ctypes.c_void_p),
("pwszRealm", ctypes.c_void_p),
("pwszPackage", ctypes.c_void_p),
("nRetries", ctypes.c_int),
("flags", wintypes.DWORD),
("pCredential", ctypes.c_void_p),
]#[repr(C)]
pub struct MFP_EVENT_HEADER {
pub eEventType: i32,
pub hrEvent: i32,
pub pMediaPlayer: *mut core::ffi::c_void,
pub eState: i32,
pub pPropertyStore: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT {
pub header: MFP_EVENT_HEADER,
pub dwUserData: usize,
pub fProceedWithAuthentication: i32,
pub hrAuthenticationStatus: i32,
pub pwszURL: *mut core::ffi::c_void,
pub pwszSite: *mut core::ffi::c_void,
pub pwszRealm: *mut core::ffi::c_void,
pub pwszPackage: *mut core::ffi::c_void,
pub nRetries: i32,
pub flags: u32,
pub pCredential: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type MFP_EVENT_HEADER struct {
eEventType int32
hrEvent int32
pMediaPlayer uintptr
eState int32
pPropertyStore uintptr
}
type MFP_ACQUIRE_USER_CREDENTIAL_EVENT struct {
header MFP_EVENT_HEADER
dwUserData uintptr
fProceedWithAuthentication int32
hrAuthenticationStatus int32
pwszURL uintptr
pwszSite uintptr
pwszRealm uintptr
pwszPackage uintptr
nRetries int32
flags uint32
pCredential uintptr
}type
MFP_EVENT_HEADER = record
eEventType: Integer;
hrEvent: Integer;
pMediaPlayer: Pointer;
eState: Integer;
pPropertyStore: Pointer;
end;
MFP_ACQUIRE_USER_CREDENTIAL_EVENT = record
header: MFP_EVENT_HEADER;
dwUserData: NativeUInt;
fProceedWithAuthentication: BOOL;
hrAuthenticationStatus: Integer;
pwszURL: Pointer;
pwszSite: Pointer;
pwszRealm: Pointer;
pwszPackage: Pointer;
nRetries: Integer;
flags: DWORD;
pCredential: Pointer;
end;const MFP_EVENT_HEADER = extern struct {
eEventType: i32,
hrEvent: i32,
pMediaPlayer: ?*anyopaque,
eState: i32,
pPropertyStore: ?*anyopaque,
};
const MFP_ACQUIRE_USER_CREDENTIAL_EVENT = extern struct {
header: MFP_EVENT_HEADER,
dwUserData: usize,
fProceedWithAuthentication: i32,
hrAuthenticationStatus: i32,
pwszURL: ?*anyopaque,
pwszSite: ?*anyopaque,
pwszRealm: ?*anyopaque,
pwszPackage: ?*anyopaque,
nRetries: i32,
flags: u32,
pCredential: ?*anyopaque,
};type
MFP_EVENT_HEADER {.bycopy.} = object
eEventType: int32
hrEvent: int32
pMediaPlayer: pointer
eState: int32
pPropertyStore: pointer
MFP_ACQUIRE_USER_CREDENTIAL_EVENT {.bycopy.} = object
header: MFP_EVENT_HEADER
dwUserData: uint
fProceedWithAuthentication: int32
hrAuthenticationStatus: int32
pwszURL: pointer
pwszSite: pointer
pwszRealm: pointer
pwszPackage: pointer
nRetries: int32
flags: uint32
pCredential: pointerstruct MFP_EVENT_HEADER
{
int eEventType;
int hrEvent;
void* pMediaPlayer;
int eState;
void* pPropertyStore;
}
struct MFP_ACQUIRE_USER_CREDENTIAL_EVENT
{
MFP_EVENT_HEADER header;
size_t dwUserData;
int fProceedWithAuthentication;
int hrAuthenticationStatus;
void* pwszURL;
void* pwszSite;
void* pwszRealm;
void* pwszPackage;
int nRetries;
uint flags;
void* pCredential;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MFP_ACQUIRE_USER_CREDENTIAL_EVENT サイズ: 60 バイト(x86)
dim st, 15 ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; header : MFP_EVENT_HEADER (+0, 20byte) varptr(st)+0 を基点に操作(20byte:入れ子/配列)
; dwUserData : UINT_PTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; fProceedWithAuthentication : BOOL (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; hrAuthenticationStatus : HRESULT (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pwszURL : LPWSTR (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pwszSite : LPWSTR (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pwszRealm : LPWSTR (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pwszPackage : LPWSTR (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; nRetries : INT (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; flags : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; pCredential : IMFNetCredential* (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MFP_ACQUIRE_USER_CREDENTIAL_EVENT サイズ: 96 バイト(x64)
dim st, 24 ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; header : MFP_EVENT_HEADER (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; dwUserData : UINT_PTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; fProceedWithAuthentication : BOOL (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; hrAuthenticationStatus : HRESULT (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; pwszURL : LPWSTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pwszSite : LPWSTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pwszRealm : LPWSTR (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pwszPackage : LPWSTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; nRetries : INT (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; flags : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; pCredential : IMFNetCredential* (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global MFP_EVENT_HEADER
#field int eEventType
#field int hrEvent
#field intptr pMediaPlayer
#field int eState
#field intptr pPropertyStore
#endstruct
#defstruct global MFP_ACQUIRE_USER_CREDENTIAL_EVENT
#field MFP_EVENT_HEADER header
#field intptr dwUserData
#field bool fProceedWithAuthentication
#field int hrAuthenticationStatus
#field intptr pwszURL
#field intptr pwszSite
#field intptr pwszRealm
#field intptr pwszPackage
#field int nRetries
#field int flags
#field intptr pCredential
#endstruct
stdim st, MFP_ACQUIRE_USER_CREDENTIAL_EVENT ; NSTRUCT 変数を確保
st->dwUserData = 100
mes "dwUserData=" + st->dwUserData