55using System . IO ;
66using System . Runtime . InteropServices ;
77using Microsoft . Win32 . SafeHandles ;
8- using static PInvoke . Kernel32 ;
9- using FileShare = PInvoke . Kernel32 . FileShare ;
8+ using Windows . Win32 ;
9+ using Windows . Win32 . Storage . FileSystem ;
10+ using Windows . Win32 . System . SystemServices ;
1011
1112namespace Nerdbank . GitVersioning . ManagedGit
1213{
@@ -24,7 +25,7 @@ internal static bool TryOpen(string path, out FileStream? stream)
2425 {
2526 if ( IsWindows )
2627 {
27- var handle = CreateFile ( path , ACCESS_MASK . GenericRight . GENERIC_READ , FileShare . FILE_SHARE_READ , ( SECURITY_ATTRIBUTES ? ) null , CreationDisposition . OPEN_EXISTING , CreateFileFlags . FILE_ATTRIBUTE_NORMAL , SafeObjectHandle . Null ) ;
28+ var handle = PInvoke . CreateFile ( path , FILE_ACCESS_FLAGS . FILE_GENERIC_READ , FILE_SHARE_MODE . FILE_SHARE_READ , lpSecurityAttributes : null , FILE_CREATION_DISPOSITION . OPEN_EXISTING , FILE_FLAGS_AND_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL , null ) ;
2829
2930 if ( ! handle . IsInvalid )
3031 {
@@ -62,12 +63,15 @@ internal static unsafe bool TryOpen(ReadOnlySpan<char> path, [NotNullWhen(true)]
6263 {
6364 if ( IsWindows )
6465 {
65- var handle = CreateFile ( path , ACCESS_MASK . GenericRight . GENERIC_READ , FileShare . FILE_SHARE_READ , null , CreationDisposition . OPEN_EXISTING , CreateFileFlags . FILE_ATTRIBUTE_NORMAL , SafeObjectHandle . Null ) ;
66+ HANDLE handle ;
67+ fixed ( char * pPath = & path [ 0 ] )
68+ {
69+ handle = PInvoke . CreateFile ( pPath , FILE_ACCESS_FLAGS . FILE_GENERIC_READ , FILE_SHARE_MODE . FILE_SHARE_READ , null , FILE_CREATION_DISPOSITION . OPEN_EXISTING , FILE_FLAGS_AND_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL , default ) ;
70+ }
6671
67- if ( ! handle . IsInvalid )
72+ if ( ! handle . Equals ( Constants . INVALID_HANDLE_VALUE ) )
6873 {
69- var fileHandle = new SafeFileHandle ( handle . DangerousGetHandle ( ) , ownsHandle : true ) ;
70- handle . SetHandleAsInvalid ( ) ;
74+ var fileHandle = new SafeFileHandle ( handle , ownsHandle : true ) ;
7175 stream = new FileStream ( fileHandle , System . IO . FileAccess . Read ) ;
7276 return true ;
7377 }
0 commit comments