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

EncryptionDisable

関数
指定ディレクトリの暗号化を無効化または有効化する。
DLLADVAPI32.dll呼出規約winapiSetLastErrorあり対応OSWindows XP 以降

シグネチャ

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

BOOL EncryptionDisable(
    LPCWSTR DirPath,
    BOOL Disable
);

パラメーター

名前方向説明
DirPathLPCWSTRin暗号化を有効化または無効化する対象のディレクトリの名前です。
DisableBOOLin暗号化を無効化する(TRUE)か有効化する(FALSE)かを指定します。

戻り値の型: BOOL

公式ドキュメント

指定したディレクトリおよびその中のファイルの暗号化を無効化または有効化します。

戻り値

関数が成功した場合、戻り値は 0 以外の値です。

関数が失敗した場合、戻り値は 0 です。拡張エラー情報を取得するには、 GetLastError を呼び出します。

解説(Remarks)

通常の状況では、EncryptFileFILE_ATTRIBUTE_SYSTEM 属性が設定されたファイルおよびディレクトリを暗号化しません。FILE_ATTRIBUTE_SYSTEM 属性を オーバーライドしてファイルを暗号化することは可能です。また、ファイルまたは ディレクトリに FILE_ATTRIBUTE_SYSTEM 属性が設定されている場合、通常はディレクトリの一覧や Windows エクスプローラーの ディレクトリウィンドウにおいてユーザーには表示されません。 EncryptionDisable はディレクトリおよびファイルの暗号化を無効化します。FILE_ATTRIBUTE_SYSTEM 属性が設定された ファイルの表示状態には影響しません。

TRUE が渡された場合、 EncryptionDisable はディレクトリ内の Desktop.ini ファイルに以下を書き込みます (必要に応じてファイルを作成します)。

[Encryption]
Disable=1

セクションが既に存在するが Disable が 0 に設定されている場合、1 に設定されます。

その後、EncryptFile はそのディレクトリ およびその中のファイルに対して失敗し、 GetLastError が返すコードは ERROR_DIR_EFS_DISALLOWED になります。この関数は、指定したディレクトリ内の サブディレクトリの暗号化には影響しません。

ユーザーは Desktop.ini ファイル内の上記の行を手動で追加または編集して、 同じ効果を得ることもできます。

EncryptionDisableFileEncryptionStatus および EncryptFile にのみ影響します。ディレクトリが 暗号化された後、FILE_ATTRIBUTE_SYSTEM 属性なしで作成された新しいファイルおよび新しいサブディレクトリは 暗号化されます。

FALSE が渡された場合、 EncryptionDisable は Desktop.ini ファイルに以下を書き込みます。

[Encryption]
Disable=0

これは、そのディレクトリ内のファイルでファイルの暗号化が許可されることを意味します。

EncryptionDisable を使用してディレクトリを既に設定されている状態に 設定しようとした場合、関数は成功しますが効果はありません。

EncryptionDisable を使用してファイルの暗号化を無効化または 有効化しようとした場合、その試みは失敗します。

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>

BOOL EncryptionDisable(
    LPCWSTR DirPath,
    BOOL Disable
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("ADVAPI32.dll", SetLastError = true, ExactSpelling = true)]
static extern bool EncryptionDisable(
    [MarshalAs(UnmanagedType.LPWStr)] string DirPath,   // LPCWSTR
    bool Disable   // BOOL
);
<DllImport("ADVAPI32.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function EncryptionDisable(
    <MarshalAs(UnmanagedType.LPWStr)> DirPath As String,   ' LPCWSTR
    Disable As Boolean   ' BOOL
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
' DirPath : LPCWSTR
' Disable : BOOL
Declare PtrSafe Function EncryptionDisable Lib "advapi32" ( _
    ByVal DirPath As LongPtr, _
    ByVal Disable As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

EncryptionDisable = ctypes.windll.advapi32.EncryptionDisable
EncryptionDisable.restype = wintypes.BOOL
EncryptionDisable.argtypes = [
    wintypes.LPCWSTR,  # DirPath : LPCWSTR
    wintypes.BOOL,  # Disable : BOOL
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ADVAPI32.dll')
EncryptionDisable = Fiddle::Function.new(
  lib['EncryptionDisable'],
  [
    Fiddle::TYPE_VOIDP,  # DirPath : LPCWSTR
    Fiddle::TYPE_INT,  # Disable : BOOL
  ],
  Fiddle::TYPE_INT)
#[link(name = "advapi32")]
extern "system" {
    fn EncryptionDisable(
        DirPath: *const u16,  // LPCWSTR
        Disable: i32  // BOOL
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("ADVAPI32.dll", SetLastError = true)]
public static extern bool EncryptionDisable([MarshalAs(UnmanagedType.LPWStr)] string DirPath, bool Disable);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_EncryptionDisable' -Namespace Win32 -PassThru
# $api::EncryptionDisable(DirPath, Disable)
#uselib "ADVAPI32.dll"
#func global EncryptionDisable "EncryptionDisable" sptr, sptr
; EncryptionDisable DirPath, Disable   ; 戻り値は stat
; DirPath : LPCWSTR -> "sptr"
; Disable : BOOL -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "ADVAPI32.dll"
#cfunc global EncryptionDisable "EncryptionDisable" wstr, int
; res = EncryptionDisable(DirPath, Disable)
; DirPath : LPCWSTR -> "wstr"
; Disable : BOOL -> "int"
; BOOL EncryptionDisable(LPCWSTR DirPath, BOOL Disable)
#uselib "ADVAPI32.dll"
#cfunc global EncryptionDisable "EncryptionDisable" wstr, int
; res = EncryptionDisable(DirPath, Disable)
; DirPath : LPCWSTR -> "wstr"
; Disable : BOOL -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
	procEncryptionDisable = advapi32.NewProc("EncryptionDisable")
)

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

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

typedef EncryptionDisableNative = Int32 Function(Pointer<Utf16>, Int32);
typedef EncryptionDisableDart = int Function(Pointer<Utf16>, int);
final EncryptionDisable = DynamicLibrary.open('ADVAPI32.dll')
    .lookupFunction<EncryptionDisableNative, EncryptionDisableDart>('EncryptionDisable');
// DirPath : LPCWSTR -> Pointer<Utf16>
// Disable : BOOL -> Int32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function EncryptionDisable(
  DirPath: PWideChar;   // LPCWSTR
  Disable: BOOL   // BOOL
): BOOL; stdcall;
  external 'ADVAPI32.dll' name 'EncryptionDisable';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "EncryptionDisable"
  c_EncryptionDisable :: CWString -> CInt -> IO CInt
-- DirPath : LPCWSTR -> CWString
-- Disable : BOOL -> CInt
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let encryptiondisable =
  foreign "EncryptionDisable"
    ((ptr uint16_t) @-> int32_t @-> returning int32_t)
(* DirPath : LPCWSTR -> (ptr uint16_t) *)
(* Disable : BOOL -> int32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library advapi32 (t "ADVAPI32.dll"))
(cffi:use-foreign-library advapi32)

(cffi:defcfun ("EncryptionDisable" encryption-disable :convention :stdcall) :int32
  (dir-path (:string :encoding :utf-16le))   ; LPCWSTR
  (disable :int32))   ; BOOL
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $EncryptionDisable = Win32::API::More->new('ADVAPI32',
    'BOOL EncryptionDisable(LPCWSTR DirPath, BOOL Disable)');
# my $ret = $EncryptionDisable->Call($DirPath, $Disable);
# DirPath : LPCWSTR -> LPCWSTR
# Disable : BOOL -> BOOL
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目