16
16
using Vanara . Windows . Shell ;
17
17
using Windows . Win32 ;
18
18
using Windows . Win32 . Foundation ;
19
+ using Windows . Win32 . Storage . FileSystem ;
19
20
using Windows . Foundation ;
20
21
using Windows . Storage ;
21
22
using Windows . Storage . FileProperties ;
25
26
using FileAttributes = System . IO . FileAttributes ;
26
27
using ByteSize = ByteSizeLib . ByteSize ;
27
28
using Windows . Win32 . System . SystemServices ;
29
+ using FINDEX_SEARCH_OPS = Windows . Win32 . Storage . FileSystem . FINDEX_SEARCH_OPS ;
30
+ using FINDEX_INFO_LEVELS = Windows . Win32 . Storage . FileSystem . FINDEX_INFO_LEVELS ;
28
31
29
32
namespace Files . App . ViewModels
30
33
{
@@ -1750,7 +1753,7 @@ await DialogDisplayHelper.ShowDialogAsync(
1750
1753
var findInfoLevel = FINDEX_INFO_LEVELS . FindExInfoBasic ;
1751
1754
var additionalFlags = FIND_FIRST_EX_LARGE_FETCH ;
1752
1755
1753
- IntPtr hFileTsk = FindFirstFileExFromApp (
1756
+ IntPtr hFileTsk = PInvoke . FindFirstFileEx (
1754
1757
path + "\\ *.*" ,
1755
1758
findInfoLevel ,
1756
1759
out WIN32_FIND_DATA findDataTsk ,
@@ -2215,16 +2218,20 @@ private unsafe void WatchForDirectoryChanges(string path, CloudDriveSyncStatus s
2215
2218
2216
2219
private unsafe void WatchForGitChanges ( )
2217
2220
{
2218
- var hWatchDir = Win32PInvoke . CreateFileFromApp (
2219
- GitDirectory ! ,
2220
- 1 ,
2221
- 1 | 2 | 4 ,
2222
- IntPtr . Zero ,
2223
- 3 ,
2224
- ( uint ) Win32PInvoke . File_Attributes . BackupSemantics | ( uint ) Win32PInvoke . File_Attributes . Overlapped ,
2225
- IntPtr . Zero ) ;
2221
+ HANDLE hWatchDir ;
2226
2222
2227
- if ( hWatchDir . ToInt64 ( ) == - 1 )
2223
+ fixed ( char * gitDir = GitDirectory )
2224
+ {
2225
+ hWatchDir = PInvoke . CreateFile (
2226
+ gitDir ! ,
2227
+ 1 ,
2228
+ FILE_SHARE_MODE . FILE_SHARE_READ | FILE_SHARE_MODE . FILE_SHARE_WRITE | FILE_SHARE_MODE . FILE_SHARE_DELETE ,
2229
+ dwCreationDisposition : FILE_CREATION_DISPOSITION . OPEN_EXISTING ,
2230
+ dwFlagsAndAttributes : FILE_FLAGS_AND_ATTRIBUTES . FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAGS_AND_ATTRIBUTES . FILE_FLAG_OVERLAPPED ,
2231
+ hTemplateFile : ( HANDLE ) null ) ;
2232
+ }
2233
+
2234
+ if ( hWatchDir . IsNull )
2228
2235
return ;
2229
2236
2230
2237
gitProcessQueueAction ??= Task . Factory . StartNew ( ( ) => ProcessGitChangesQueueAsync ( watcherCTS . Token ) , default ,
@@ -2236,8 +2243,8 @@ private unsafe void WatchForGitChanges()
2236
2243
var rand = Guid . NewGuid ( ) ;
2237
2244
var notifyFilters = FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_CREATION ;
2238
2245
2239
- var overlapped = new OVERLAPPED ( ) ;
2240
- overlapped . hEvent = CreateEvent ( IntPtr . Zero , false , false , null ) ;
2246
+ var overlapped = new Overlapped ( ) ;
2247
+ overlapped . EventHandleIntPtr = PInvoke . CreateEvent ( ( bManualReset : false , bInitialState : false , lpName : null ) ;
2241
2248
const uint INFINITE = 0xFFFFFFFF ;
2242
2249
2243
2250
while ( x . Status != AsyncStatus . Canceled )
@@ -2250,15 +2257,16 @@ private unsafe void WatchForGitChanges()
2250
2257
if ( x . Status == AsyncStatus . Canceled )
2251
2258
break ;
2252
2259
2253
- ReadDirectoryChangesW ( hWatchDir , pBuff ,
2260
+ PInvoke . ReadDirectoryChanges ( hWatchDir , pBuff ,
2254
2261
4096 , true ,
2255
- notifyFilters , null ,
2256
- ref overlapped , null ) ;
2262
+ notifyFilters ,
2263
+ lpOverlapped : ref overlapped ,
2264
+ lpCompletionRoutine : null ) ;
2257
2265
2258
2266
if ( x . Status == AsyncStatus . Canceled )
2259
2267
break ;
2260
2268
2261
- var rc = WaitForSingleObjectEx ( overlapped . hEvent , INFINITE , true ) ;
2269
+ var rc = WaitForSingleObjectEx ( overlapped . EventHandleIntPtr , INFINITE , true ) ;
2262
2270
2263
2271
uint offset = 0 ;
2264
2272
ref var notifyInfo = ref Unsafe . As < byte , FILE_NOTIFY_INFORMATION > ( ref buff [ offset ] ) ;
@@ -2282,7 +2290,7 @@ private unsafe void WatchForGitChanges()
2282
2290
}
2283
2291
}
2284
2292
2285
- CloseHandle ( overlapped . hEvent ) ;
2293
+ PInvoke . CloseHandle ( ( HANDLE ) overlapped . EventHandleIntPtr ) ;
2286
2294
gitChangesQueue . Clear ( ) ;
2287
2295
} ) ;
2288
2296
@@ -2296,7 +2304,7 @@ private unsafe void WatchForGitChanges()
2296
2304
gitWatcherAction = null ;
2297
2305
}
2298
2306
2299
- PInvoke . CancelIoEx ( ( HANDLE ) hWatchDir ) ;
2307
+ PInvoke . CancelIoEx ( hWatchDir ) ;
2300
2308
CloseHandle ( hWatchDir ) ;
2301
2309
} ) ;
2302
2310
}
0 commit comments