5
5
using System . IO ;
6
6
using System . Runtime . InteropServices ;
7
7
using 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 ;
10
11
11
12
namespace Nerdbank . GitVersioning . ManagedGit
12
13
{
@@ -24,7 +25,7 @@ internal static bool TryOpen(string path, out FileStream? stream)
24
25
{
25
26
if ( IsWindows )
26
27
{
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 ) ;
28
29
29
30
if ( ! handle . IsInvalid )
30
31
{
@@ -62,12 +63,15 @@ internal static unsafe bool TryOpen(ReadOnlySpan<char> path, [NotNullWhen(true)]
62
63
{
63
64
if ( IsWindows )
64
65
{
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
+ }
66
71
67
- if ( ! handle . IsInvalid )
72
+ if ( ! handle . Equals ( Constants . INVALID_HANDLE_VALUE ) )
68
73
{
69
- var fileHandle = new SafeFileHandle ( handle . DangerousGetHandle ( ) , ownsHandle : true ) ;
70
- handle . SetHandleAsInvalid ( ) ;
74
+ var fileHandle = new SafeFileHandle ( handle , ownsHandle : true ) ;
71
75
stream = new FileStream ( fileHandle , System . IO . FileAccess . Read ) ;
72
76
return true ;
73
77
}
0 commit comments