Win32 API 日本語リファレンス
ホームStorage.FileSystem › DuplicateEncryptionInfoFile

DuplicateEncryptionInfoFile

関数
暗号化情報を引き継いでファイルを複製する。
DLLADVAPI32.dll呼出規約winapi対応OSWindows XP 以降

シグネチャ

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

DWORD DuplicateEncryptionInfoFile(
    LPCWSTR SrcFileName,
    LPCWSTR DstFileName,
    DWORD dwCreationDistribution,
    DWORD dwAttributes,
    const SECURITY_ATTRIBUTES* lpSecurityAttributes   // optional
);

パラメーター

名前方向説明
SrcFileNameLPCWSTRinEFS メタデータのコピー元となるファイルまたはディレクトリの名前です。このコピー元のファイルまたはディレクトリは暗号化されている必要があります。
DstFileNameLPCWSTRin

EFS メタデータのコピー先となるファイルまたはディレクトリの名前です。

このコピー先のファイルまたはディレクトリは、この関数を呼び出す前に暗号化されている必要はありません。ただし、この関数が正常に完了すると暗号化されます。

SrcFileName の値がファイルを指定している場合、このパラメーターの値もファイルを指定する必要があります。ディレクトリの場合も同様です。このパラメーターで指定された名前のファイルまたはディレクトリが存在しない場合、(SrcFileName がファイルとディレクトリのどちらを指定しているかに応じて) ファイルまたはディレクトリが作成されます。

dwCreationDistributionDWORDin

DstFileName パラメーターの値で識別されるコピー先のファイルまたはディレクトリを、どのように開くかを記述します。このパラメーターの有効な値は次のとおりです。

意味
CREATE_ALWAYS
2
コピー先のファイルまたはディレクトリを常に作成します。このパラメーターに CREATE_NEW 以外の値が渡された場合は、CREATE_ALWAYS として処理されます。
CREATE_NEW
1
コピー先のファイルまたはディレクトリが既に存在しない場合にのみ作成します。既に存在し、かつこの値が指定された場合、この関数は失敗します。
dwAttributesDWORDinコピー先のファイルまたはディレクトリのファイル属性です。FILE_READ_ONLY 属性は、現在この関数では処理されません。
lpSecurityAttributesSECURITY_ATTRIBUTES*inoptionalコピー先のファイルまたはディレクトリがまだ存在しない場合に、そのセキュリティ属性を指定する SECURITY_ATTRIBUTES 構造体へのポインターです。NULL を指定した場合、ファイルまたはディレクトリには既定のセキュリティ記述子が設定されます。ファイルまたはディレクトリの既定のセキュリティ記述子内の ACL は、その親ディレクトリから継承されます。

戻り値の型: DWORD

公式ドキュメント

EFS メタデータをあるファイルまたはディレクトリから別のファイルまたはディレクトリへコピーします。

戻り値

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

関数が失敗した場合、戻り値はシステム エラー コードです。エラー コードの完全な一覧については、 System Error Codes またはヘッダー ファイル WinError.h を参照してください。

解説(Remarks)

この関数の呼び出しでは、EFS によってコピー先のファイルまたはディレクトリへの排他アクセスが必要とされます。このアクセスが提供されない場合、この関数は失敗します。

呼び出し元は、コピー元のファイルまたはディレクトリの EFS キーを持っており、少なくともコピー元のファイルまたはディレクトリに対する READ_ATTRIBUTE ACL を持っている必要があります。

指定されたコピー元およびコピー先のファイルまたはディレクトリは、同じコンピューター上に存在する必要があります。そうでない場合、エラーが返されます。

Windows 8 および Windows Server 2012 では、この関数は次のテクノロジでサポートされています。

テクノロジ サポート
Server Message Block (SMB) 3.0 プロトコル はい
SMB 3.0 トランスペアレント フェールオーバー (TFO) いいえ
SMB 3.0 とスケールアウト ファイル共有 (SO) いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) いいえ
復元ファイル システム (ReFS) いいえ

SMB 3.0 は、継続的可用性機能を持つ共有上での EFS をサポートしません。

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

各言語での呼び出し定義

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

DWORD DuplicateEncryptionInfoFile(
    LPCWSTR SrcFileName,
    LPCWSTR DstFileName,
    DWORD dwCreationDistribution,
    DWORD dwAttributes,
    const SECURITY_ATTRIBUTES* lpSecurityAttributes   // optional
);
[DllImport("ADVAPI32.dll", ExactSpelling = true)]
static extern uint DuplicateEncryptionInfoFile(
    [MarshalAs(UnmanagedType.LPWStr)] string SrcFileName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string DstFileName,   // LPCWSTR
    uint dwCreationDistribution,   // DWORD
    uint dwAttributes,   // DWORD
    IntPtr lpSecurityAttributes   // SECURITY_ATTRIBUTES* optional
);
<DllImport("ADVAPI32.dll", ExactSpelling:=True)>
Public Shared Function DuplicateEncryptionInfoFile(
    <MarshalAs(UnmanagedType.LPWStr)> SrcFileName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> DstFileName As String,   ' LPCWSTR
    dwCreationDistribution As UInteger,   ' DWORD
    dwAttributes As UInteger,   ' DWORD
    lpSecurityAttributes As IntPtr   ' SECURITY_ATTRIBUTES* optional
) As UInteger
End Function
' SrcFileName : LPCWSTR
' DstFileName : LPCWSTR
' dwCreationDistribution : DWORD
' dwAttributes : DWORD
' lpSecurityAttributes : SECURITY_ATTRIBUTES* optional
Declare PtrSafe Function DuplicateEncryptionInfoFile Lib "advapi32" ( _
    ByVal SrcFileName As LongPtr, _
    ByVal DstFileName As LongPtr, _
    ByVal dwCreationDistribution As Long, _
    ByVal dwAttributes As Long, _
    ByVal lpSecurityAttributes As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

DuplicateEncryptionInfoFile = ctypes.windll.advapi32.DuplicateEncryptionInfoFile
DuplicateEncryptionInfoFile.restype = wintypes.DWORD
DuplicateEncryptionInfoFile.argtypes = [
    wintypes.LPCWSTR,  # SrcFileName : LPCWSTR
    wintypes.LPCWSTR,  # DstFileName : LPCWSTR
    wintypes.DWORD,  # dwCreationDistribution : DWORD
    wintypes.DWORD,  # dwAttributes : DWORD
    ctypes.c_void_p,  # lpSecurityAttributes : SECURITY_ATTRIBUTES* optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ADVAPI32.dll')
DuplicateEncryptionInfoFile = Fiddle::Function.new(
  lib['DuplicateEncryptionInfoFile'],
  [
    Fiddle::TYPE_VOIDP,  # SrcFileName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # DstFileName : LPCWSTR
    -Fiddle::TYPE_INT,  # dwCreationDistribution : DWORD
    -Fiddle::TYPE_INT,  # dwAttributes : DWORD
    Fiddle::TYPE_VOIDP,  # lpSecurityAttributes : SECURITY_ATTRIBUTES* optional
  ],
  -Fiddle::TYPE_INT)
#[link(name = "advapi32")]
extern "system" {
    fn DuplicateEncryptionInfoFile(
        SrcFileName: *const u16,  // LPCWSTR
        DstFileName: *const u16,  // LPCWSTR
        dwCreationDistribution: u32,  // DWORD
        dwAttributes: u32,  // DWORD
        lpSecurityAttributes: *const SECURITY_ATTRIBUTES  // SECURITY_ATTRIBUTES* optional
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ADVAPI32.dll")]
public static extern uint DuplicateEncryptionInfoFile([MarshalAs(UnmanagedType.LPWStr)] string SrcFileName, [MarshalAs(UnmanagedType.LPWStr)] string DstFileName, uint dwCreationDistribution, uint dwAttributes, IntPtr lpSecurityAttributes);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_DuplicateEncryptionInfoFile' -Namespace Win32 -PassThru
# $api::DuplicateEncryptionInfoFile(SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, lpSecurityAttributes)
#uselib "ADVAPI32.dll"
#func global DuplicateEncryptionInfoFile "DuplicateEncryptionInfoFile" sptr, sptr, sptr, sptr, sptr
; DuplicateEncryptionInfoFile SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, varptr(lpSecurityAttributes)   ; 戻り値は stat
; SrcFileName : LPCWSTR -> "sptr"
; DstFileName : LPCWSTR -> "sptr"
; dwCreationDistribution : DWORD -> "sptr"
; dwAttributes : DWORD -> "sptr"
; lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ADVAPI32.dll"
#cfunc global DuplicateEncryptionInfoFile "DuplicateEncryptionInfoFile" wstr, wstr, int, int, var
; res = DuplicateEncryptionInfoFile(SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, lpSecurityAttributes)
; SrcFileName : LPCWSTR -> "wstr"
; DstFileName : LPCWSTR -> "wstr"
; dwCreationDistribution : DWORD -> "int"
; dwAttributes : DWORD -> "int"
; lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD DuplicateEncryptionInfoFile(LPCWSTR SrcFileName, LPCWSTR DstFileName, DWORD dwCreationDistribution, DWORD dwAttributes, SECURITY_ATTRIBUTES* lpSecurityAttributes)
#uselib "ADVAPI32.dll"
#cfunc global DuplicateEncryptionInfoFile "DuplicateEncryptionInfoFile" wstr, wstr, int, int, var
; res = DuplicateEncryptionInfoFile(SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, lpSecurityAttributes)
; SrcFileName : LPCWSTR -> "wstr"
; DstFileName : LPCWSTR -> "wstr"
; dwCreationDistribution : DWORD -> "int"
; dwAttributes : DWORD -> "int"
; lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
	procDuplicateEncryptionInfoFile = advapi32.NewProc("DuplicateEncryptionInfoFile")
)

// SrcFileName (LPCWSTR), DstFileName (LPCWSTR), dwCreationDistribution (DWORD), dwAttributes (DWORD), lpSecurityAttributes (SECURITY_ATTRIBUTES* optional)
r1, _, err := procDuplicateEncryptionInfoFile.Call(
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(SrcFileName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(DstFileName))),
	uintptr(dwCreationDistribution),
	uintptr(dwAttributes),
	uintptr(lpSecurityAttributes),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function DuplicateEncryptionInfoFile(
  SrcFileName: PWideChar;   // LPCWSTR
  DstFileName: PWideChar;   // LPCWSTR
  dwCreationDistribution: DWORD;   // DWORD
  dwAttributes: DWORD;   // DWORD
  lpSecurityAttributes: Pointer   // SECURITY_ATTRIBUTES* optional
): DWORD; stdcall;
  external 'ADVAPI32.dll' name 'DuplicateEncryptionInfoFile';
result := DllCall("ADVAPI32\DuplicateEncryptionInfoFile"
    , "WStr", SrcFileName   ; LPCWSTR
    , "WStr", DstFileName   ; LPCWSTR
    , "UInt", dwCreationDistribution   ; DWORD
    , "UInt", dwAttributes   ; DWORD
    , "Ptr", lpSecurityAttributes   ; SECURITY_ATTRIBUTES* optional
    , "UInt")   ; return: DWORD
●DuplicateEncryptionInfoFile(SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, lpSecurityAttributes) = DLL("ADVAPI32.dll", "dword DuplicateEncryptionInfoFile(char*, char*, dword, dword, void*)")
# 呼び出し: DuplicateEncryptionInfoFile(SrcFileName, DstFileName, dwCreationDistribution, dwAttributes, lpSecurityAttributes)
# SrcFileName : LPCWSTR -> "char*"
# DstFileName : LPCWSTR -> "char*"
# dwCreationDistribution : DWORD -> "dword"
# dwAttributes : DWORD -> "dword"
# lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

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

typedef DuplicateEncryptionInfoFileNative = Uint32 Function(Pointer<Utf16>, Pointer<Utf16>, Uint32, Uint32, Pointer<Void>);
typedef DuplicateEncryptionInfoFileDart = int Function(Pointer<Utf16>, Pointer<Utf16>, int, int, Pointer<Void>);
final DuplicateEncryptionInfoFile = DynamicLibrary.open('ADVAPI32.dll')
    .lookupFunction<DuplicateEncryptionInfoFileNative, DuplicateEncryptionInfoFileDart>('DuplicateEncryptionInfoFile');
// SrcFileName : LPCWSTR -> Pointer<Utf16>
// DstFileName : LPCWSTR -> Pointer<Utf16>
// dwCreationDistribution : DWORD -> Uint32
// dwAttributes : DWORD -> Uint32
// lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function DuplicateEncryptionInfoFile(
  SrcFileName: PWideChar;   // LPCWSTR
  DstFileName: PWideChar;   // LPCWSTR
  dwCreationDistribution: DWORD;   // DWORD
  dwAttributes: DWORD;   // DWORD
  lpSecurityAttributes: Pointer   // SECURITY_ATTRIBUTES* optional
): DWORD; stdcall;
  external 'ADVAPI32.dll' name 'DuplicateEncryptionInfoFile';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "DuplicateEncryptionInfoFile"
  c_DuplicateEncryptionInfoFile :: CWString -> CWString -> Word32 -> Word32 -> Ptr () -> IO Word32
-- SrcFileName : LPCWSTR -> CWString
-- DstFileName : LPCWSTR -> CWString
-- dwCreationDistribution : DWORD -> Word32
-- dwAttributes : DWORD -> Word32
-- lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let duplicateencryptioninfofile =
  foreign "DuplicateEncryptionInfoFile"
    ((ptr uint16_t) @-> (ptr uint16_t) @-> uint32_t @-> uint32_t @-> (ptr void) @-> returning uint32_t)
(* SrcFileName : LPCWSTR -> (ptr uint16_t) *)
(* DstFileName : LPCWSTR -> (ptr uint16_t) *)
(* dwCreationDistribution : DWORD -> uint32_t *)
(* dwAttributes : DWORD -> uint32_t *)
(* lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library advapi32 (t "ADVAPI32.dll"))
(cffi:use-foreign-library advapi32)

(cffi:defcfun ("DuplicateEncryptionInfoFile" duplicate-encryption-info-file :convention :stdcall) :uint32
  (src-file-name (:string :encoding :utf-16le))   ; LPCWSTR
  (dst-file-name (:string :encoding :utf-16le))   ; LPCWSTR
  (dw-creation-distribution :uint32)   ; DWORD
  (dw-attributes :uint32)   ; DWORD
  (lp-security-attributes :pointer))   ; SECURITY_ATTRIBUTES* optional
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $DuplicateEncryptionInfoFile = Win32::API::More->new('ADVAPI32',
    'DWORD DuplicateEncryptionInfoFile(LPCWSTR SrcFileName, LPCWSTR DstFileName, DWORD dwCreationDistribution, DWORD dwAttributes, LPVOID lpSecurityAttributes)');
# my $ret = $DuplicateEncryptionInfoFile->Call($SrcFileName, $DstFileName, $dwCreationDistribution, $dwAttributes, $lpSecurityAttributes);
# SrcFileName : LPCWSTR -> LPCWSTR
# DstFileName : LPCWSTR -> LPCWSTR
# dwCreationDistribution : DWORD -> DWORD
# dwAttributes : DWORD -> DWORD
# lpSecurityAttributes : SECURITY_ATTRIBUTES* optional -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

使用する型