Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
TransactionFile.cpp
[詳解]
1// ----------------------------------------------------------------------------
6
7#include "pch.h"
8#include "TransactionFile.h"
9
10using namespace alt;
11
12// -- TransactionFileUtility ------------------------------------------------
13
14BOOL TransactionFileUtility::Init (LPWSTR lpwszDescription)
15{
16 DWORD dwOption = 0;
17
18 _hObject = ::CreateTransaction (
19 NULL,
20 0,
21 dwOption,
22 0,
23 0,
24 INFINITE,
25 lpwszDescription);
26
27 return _hObject == INVALID_HANDLE_VALUE ? FALSE : TRUE;
28}
29
31{
32 return ::CommitTransaction (_hObject);
33}
34
36{
37 return ::RollbackTransaction (_hObject);
38}
39
40BOOL TransactionFileUtility::CreateFolder (LPCTSTR lpctszFolderName) const
41{
42 return ::CreateDirectoryTransacted (
43 NULL,
44 lpctszFolderName,
45 NULL,
46 _hObject);
47}
48
49BOOL TransactionFileUtility::Delete (LPCTSTR lpctszFileName) const
50{
51 return ::DeleteFileTransacted (lpctszFileName, _hObject);
52}
53
55 LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
56{
57 DWORD dwFlags = COPY_FILE_FAIL_IF_EXISTS;
58
59 return ::CopyFileTransacted (
60 lpctszSrcFileName,
61 lpctszDstFileName,
62 NULL,
63 NULL,
64 NULL,
65 dwFlags,
66 _hObject);
67}
68
70 LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
71{
72 DWORD dwFlags = MOVEFILE_REPLACE_EXISTING;
73
74 return ::MoveFileTransacted (
75 lpctszSrcFileName,
76 lpctszDstFileName,
77 NULL,
78 NULL,
79 dwFlags,
80 _hObject);
81}
82
83#if defined (_MSC_VER) && (_MSC_VER >= 1910) // VS2017 over
84
85BOOL TransactionFileUtility::MakeSymbolicLink (
86 LPCTSTR lpctszSrcFileName, LPCTSTR lpctszLinkFileName, BOOL isFile) const
87{
88 DWORD dwFlags = isFile == TRUE ? 0 : SYMBOLIC_LINK_FLAG_DIRECTORY;
89 dwFlags |= SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE;
90
91 return ::CreateSymbolicLinkTransacted (
92 lpctszLinkFileName,
93 lpctszSrcFileName,
94 dwFlags,
95 _hObject);
96}
97
98#endif
99
101 LPCTSTR lpctszSrcFileName, LPCTSTR lpctszLinkFileName) const
102{
103 return ::CreateHardLinkTransacted (
104 lpctszLinkFileName,
105 lpctszSrcFileName,
106 NULL,
107 _hObject);
108}
109
110// -- TransactionFile ------------------------------------------------
111
113 HANDLE hTransaction, LPCTSTR pctszFileName, DWORD dwDesiredAccess,
114 DWORD dwShareMode, DWORD dwCreationDisposition)
115{
116 PSECURITY_ATTRIBUTES pSecurityAttributes = NULL;
117 DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
118 HANDLE hTemplateFile = NULL;
119
120 _hObject = ::CreateFileTransacted (
121 pctszFileName,
122 dwDesiredAccess,
123 dwShareMode,
124 pSecurityAttributes,
125 dwCreationDisposition,
126 dwFlagsAndAttributes,
127 hTemplateFile,
128 hTransaction,
129 NULL,
130 NULL);
131
132 return _hObject == INVALID_HANDLE_VALUE ? FALSE : TRUE;
133}
トランザクションNTFSに関するAPIを集約したクラス
プリコンパイル済みヘッダー ファイルです。
HANDLE _hObject
ハンドルを使用するWindowsAPIで保持するHANDLE値
BOOL APIENTRY Create(HANDLE hTransaction, LPCTSTR pctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
BOOL APIENTRY Copy(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
ファイルのコピー
BOOL APIENTRY Delete(LPCTSTR lpctszFileName) const
ファイルの削除
BOOL APIENTRY Init(LPWSTR lpwszDescription)
初期化
BOOL APIENTRY MakeHardLink(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszLinkFileName) const
ハードリンクの作成
BOOL APIENTRY Rollback() const
トランザクションのロールバック
BOOL APIENTRY CreateFolder(LPCTSTR lpctszFolderName) const
フォルダの作成
BOOL APIENTRY Move(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
ファイルの移動
BOOL APIENTRY Commit() const
トランザクションのコミット
Definition: DBLibrary.h:12