1616using Vanara . Windows . Shell ;
1717using Windows . Win32 ;
1818using Windows . Win32 . Foundation ;
19+ using Windows . Win32 . Storage . FileSystem ;
1920using Windows . Foundation ;
2021using Windows . Storage ;
2122using Windows . Storage . FileProperties ;
2526using FileAttributes = System . IO . FileAttributes ;
2627using ByteSize = ByteSizeLib . ByteSize ;
2728using 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 ;
2831
2932namespace Files . App . ViewModels
3033{
@@ -1750,7 +1753,7 @@ await DialogDisplayHelper.ShowDialogAsync(
17501753 var findInfoLevel = FINDEX_INFO_LEVELS . FindExInfoBasic ;
17511754 var additionalFlags = FIND_FIRST_EX_LARGE_FETCH ;
17521755
1753- IntPtr hFileTsk = FindFirstFileExFromApp (
1756+ IntPtr hFileTsk = PInvoke . FindFirstFileEx (
17541757 path + "\\ *.*" ,
17551758 findInfoLevel ,
17561759 out WIN32_FIND_DATA findDataTsk ,
@@ -2215,16 +2218,20 @@ private unsafe void WatchForDirectoryChanges(string path, CloudDriveSyncStatus s
22152218
22162219 private unsafe void WatchForGitChanges ( )
22172220 {
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 ;
22262222
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 )
22282235 return ;
22292236
22302237 gitProcessQueueAction ??= Task . Factory . StartNew ( ( ) => ProcessGitChangesQueueAsync ( watcherCTS . Token ) , default ,
@@ -2236,8 +2243,8 @@ private unsafe void WatchForGitChanges()
22362243 var rand = Guid . NewGuid ( ) ;
22372244 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 ;
22382245
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 ) ;
22412248 const uint INFINITE = 0xFFFFFFFF ;
22422249
22432250 while ( x . Status != AsyncStatus . Canceled )
@@ -2250,15 +2257,16 @@ private unsafe void WatchForGitChanges()
22502257 if ( x . Status == AsyncStatus . Canceled )
22512258 break ;
22522259
2253- ReadDirectoryChangesW ( hWatchDir , pBuff ,
2260+ PInvoke . ReadDirectoryChanges ( hWatchDir , pBuff ,
22542261 4096 , true ,
2255- notifyFilters , null ,
2256- ref overlapped , null ) ;
2262+ notifyFilters ,
2263+ lpOverlapped : ref overlapped ,
2264+ lpCompletionRoutine : null ) ;
22572265
22582266 if ( x . Status == AsyncStatus . Canceled )
22592267 break ;
22602268
2261- var rc = WaitForSingleObjectEx ( overlapped . hEvent , INFINITE , true ) ;
2269+ var rc = WaitForSingleObjectEx ( overlapped . EventHandleIntPtr , INFINITE , true ) ;
22622270
22632271 uint offset = 0 ;
22642272 ref var notifyInfo = ref Unsafe . As < byte , FILE_NOTIFY_INFORMATION > ( ref buff [ offset ] ) ;
@@ -2282,7 +2290,7 @@ private unsafe void WatchForGitChanges()
22822290 }
22832291 }
22842292
2285- CloseHandle ( overlapped . hEvent ) ;
2293+ PInvoke . CloseHandle ( ( HANDLE ) overlapped . EventHandleIntPtr ) ;
22862294 gitChangesQueue . Clear ( ) ;
22872295 } ) ;
22882296
@@ -2296,7 +2304,7 @@ private unsafe void WatchForGitChanges()
22962304 gitWatcherAction = null ;
22972305 }
22982306
2299- PInvoke . CancelIoEx ( ( HANDLE ) hWatchDir ) ;
2307+ PInvoke . CancelIoEx ( hWatchDir ) ;
23002308 CloseHandle ( hWatchDir ) ;
23012309 } ) ;
23022310 }
0 commit comments