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

DAV_CALLBACK_CRED

構造体
サイズx64: 56 バイト / x86: 36 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
AuthBlobDAV_CALLBACK_AUTH_BLOB16/12+0+0ブロブ形式の認証資格情報を保持する構造体。
UNPBlobDAV_CALLBACK_AUTH_UNP32/16+16+12ユーザー名/パスワード形式の資格情報を保持する構造体。
bAuthBlobValidBOOL4+48+28AuthBlob が有効か示すフラグ。TRUEならブロブ側を使う。
bSaveBOOL4+52+32資格情報を保存するか示すフラグ。TRUEで保存対象となる。

各言語での定義

#include <windows.h>

// DAV_CALLBACK_AUTH_BLOB  (x64 16 / x86 12 バイト)
typedef struct DAV_CALLBACK_AUTH_BLOB {
    void* pBuffer;
    DWORD ulSize;
    DWORD ulType;
} DAV_CALLBACK_AUTH_BLOB;

// DAV_CALLBACK_AUTH_UNP  (x64 32 / x86 16 バイト)
typedef struct DAV_CALLBACK_AUTH_UNP {
    LPWSTR pszUserName;
    DWORD ulUserNameLength;
    LPWSTR pszPassword;
    DWORD ulPasswordLength;
} DAV_CALLBACK_AUTH_UNP;

// DAV_CALLBACK_CRED  (x64 56 / x86 36 バイト)
typedef struct DAV_CALLBACK_CRED {
    DAV_CALLBACK_AUTH_BLOB AuthBlob;
    DAV_CALLBACK_AUTH_UNP UNPBlob;
    BOOL bAuthBlobValid;
    BOOL bSave;
} DAV_CALLBACK_CRED;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DAV_CALLBACK_AUTH_BLOB
{
    public IntPtr pBuffer;
    public uint ulSize;
    public uint ulType;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DAV_CALLBACK_AUTH_UNP
{
    public IntPtr pszUserName;
    public uint ulUserNameLength;
    public IntPtr pszPassword;
    public uint ulPasswordLength;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DAV_CALLBACK_CRED
{
    public DAV_CALLBACK_AUTH_BLOB AuthBlob;
    public DAV_CALLBACK_AUTH_UNP UNPBlob;
    [MarshalAs(UnmanagedType.Bool)] public bool bAuthBlobValid;
    [MarshalAs(UnmanagedType.Bool)] public bool bSave;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DAV_CALLBACK_AUTH_BLOB
    Public pBuffer As IntPtr
    Public ulSize As UInteger
    Public ulType As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DAV_CALLBACK_AUTH_UNP
    Public pszUserName As IntPtr
    Public ulUserNameLength As UInteger
    Public pszPassword As IntPtr
    Public ulPasswordLength As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DAV_CALLBACK_CRED
    Public AuthBlob As DAV_CALLBACK_AUTH_BLOB
    Public UNPBlob As DAV_CALLBACK_AUTH_UNP
    <MarshalAs(UnmanagedType.Bool)> Public bAuthBlobValid As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bSave As Boolean
End Structure
import ctypes
from ctypes import wintypes

class DAV_CALLBACK_AUTH_BLOB(ctypes.Structure):
    _fields_ = [
        ("pBuffer", ctypes.c_void_p),
        ("ulSize", wintypes.DWORD),
        ("ulType", wintypes.DWORD),
    ]

class DAV_CALLBACK_AUTH_UNP(ctypes.Structure):
    _fields_ = [
        ("pszUserName", ctypes.c_void_p),
        ("ulUserNameLength", wintypes.DWORD),
        ("pszPassword", ctypes.c_void_p),
        ("ulPasswordLength", wintypes.DWORD),
    ]

class DAV_CALLBACK_CRED(ctypes.Structure):
    _fields_ = [
        ("AuthBlob", DAV_CALLBACK_AUTH_BLOB),
        ("UNPBlob", DAV_CALLBACK_AUTH_UNP),
        ("bAuthBlobValid", wintypes.BOOL),
        ("bSave", wintypes.BOOL),
    ]
#[repr(C)]
pub struct DAV_CALLBACK_AUTH_BLOB {
    pub pBuffer: *mut core::ffi::c_void,
    pub ulSize: u32,
    pub ulType: u32,
}

#[repr(C)]
pub struct DAV_CALLBACK_AUTH_UNP {
    pub pszUserName: *mut core::ffi::c_void,
    pub ulUserNameLength: u32,
    pub pszPassword: *mut core::ffi::c_void,
    pub ulPasswordLength: u32,
}

#[repr(C)]
pub struct DAV_CALLBACK_CRED {
    pub AuthBlob: DAV_CALLBACK_AUTH_BLOB,
    pub UNPBlob: DAV_CALLBACK_AUTH_UNP,
    pub bAuthBlobValid: i32,
    pub bSave: i32,
}
import "golang.org/x/sys/windows"

type DAV_CALLBACK_AUTH_BLOB struct {
	pBuffer uintptr
	ulSize uint32
	ulType uint32
}

type DAV_CALLBACK_AUTH_UNP struct {
	pszUserName uintptr
	ulUserNameLength uint32
	pszPassword uintptr
	ulPasswordLength uint32
}

type DAV_CALLBACK_CRED struct {
	AuthBlob DAV_CALLBACK_AUTH_BLOB
	UNPBlob DAV_CALLBACK_AUTH_UNP
	bAuthBlobValid int32
	bSave int32
}
type
  DAV_CALLBACK_AUTH_BLOB = record
    pBuffer: Pointer;
    ulSize: DWORD;
    ulType: DWORD;
  end;

  DAV_CALLBACK_AUTH_UNP = record
    pszUserName: Pointer;
    ulUserNameLength: DWORD;
    pszPassword: Pointer;
    ulPasswordLength: DWORD;
  end;

  DAV_CALLBACK_CRED = record
    AuthBlob: DAV_CALLBACK_AUTH_BLOB;
    UNPBlob: DAV_CALLBACK_AUTH_UNP;
    bAuthBlobValid: BOOL;
    bSave: BOOL;
  end;
const DAV_CALLBACK_AUTH_BLOB = extern struct {
    pBuffer: ?*anyopaque,
    ulSize: u32,
    ulType: u32,
};

const DAV_CALLBACK_AUTH_UNP = extern struct {
    pszUserName: ?*anyopaque,
    ulUserNameLength: u32,
    pszPassword: ?*anyopaque,
    ulPasswordLength: u32,
};

const DAV_CALLBACK_CRED = extern struct {
    AuthBlob: DAV_CALLBACK_AUTH_BLOB,
    UNPBlob: DAV_CALLBACK_AUTH_UNP,
    bAuthBlobValid: i32,
    bSave: i32,
};
type
  DAV_CALLBACK_AUTH_BLOB {.bycopy.} = object
    pBuffer: pointer
    ulSize: uint32
    ulType: uint32

  DAV_CALLBACK_AUTH_UNP {.bycopy.} = object
    pszUserName: pointer
    ulUserNameLength: uint32
    pszPassword: pointer
    ulPasswordLength: uint32

  DAV_CALLBACK_CRED {.bycopy.} = object
    AuthBlob: DAV_CALLBACK_AUTH_BLOB
    UNPBlob: DAV_CALLBACK_AUTH_UNP
    bAuthBlobValid: int32
    bSave: int32
struct DAV_CALLBACK_AUTH_BLOB
{
    void* pBuffer;
    uint ulSize;
    uint ulType;
}

struct DAV_CALLBACK_AUTH_UNP
{
    void* pszUserName;
    uint ulUserNameLength;
    void* pszPassword;
    uint ulPasswordLength;
}

struct DAV_CALLBACK_CRED
{
    DAV_CALLBACK_AUTH_BLOB AuthBlob;
    DAV_CALLBACK_AUTH_UNP UNPBlob;
    int bAuthBlobValid;
    int bSave;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DAV_CALLBACK_CRED サイズ: 36 バイト(x86)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; AuthBlob : DAV_CALLBACK_AUTH_BLOB (+0, 12byte)  varptr(st)+0 を基点に操作(12byte:入れ子/配列)
; UNPBlob : DAV_CALLBACK_AUTH_UNP (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; bAuthBlobValid : BOOL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; bSave : BOOL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DAV_CALLBACK_CRED サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; AuthBlob : DAV_CALLBACK_AUTH_BLOB (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; UNPBlob : DAV_CALLBACK_AUTH_UNP (+16, 32byte)  varptr(st)+16 を基点に操作(32byte:入れ子/配列)
; bAuthBlobValid : BOOL (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; bSave : BOOL (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DAV_CALLBACK_AUTH_BLOB
    #field intptr pBuffer
    #field int ulSize
    #field int ulType
#endstruct

#defstruct global DAV_CALLBACK_AUTH_UNP
    #field intptr pszUserName
    #field int ulUserNameLength
    #field intptr pszPassword
    #field int ulPasswordLength
#endstruct

#defstruct global DAV_CALLBACK_CRED
    #field DAV_CALLBACK_AUTH_BLOB AuthBlob
    #field DAV_CALLBACK_AUTH_UNP UNPBlob
    #field bool bAuthBlobValid
    #field bool bSave
#endstruct

stdim st, DAV_CALLBACK_CRED        ; NSTRUCT 変数を確保
st->bAuthBlobValid = 100
mes "bAuthBlobValid=" + st->bAuthBlobValid