| ... | @@ -107,6 +107,7 @@ pub fn OpenFileW( | ... | @@ -107,6 +107,7 @@ pub fn OpenFileW( |
| 107 | sub_path_w: [*:0]const u16, | 107 | sub_path_w: [*:0]const u16, |
| 108 | sa: ?*SECURITY_ATTRIBUTES, | 108 | sa: ?*SECURITY_ATTRIBUTES, |
| 109 | access_mask: ACCESS_MASK, | 109 | access_mask: ACCESS_MASK, |
| | 110 | share_access_opt: ?ULONG, |
| 110 | creation: ULONG, | 111 | creation: ULONG, |
| 111 | ) OpenError!HANDLE { | 112 | ) OpenError!HANDLE { |
| 112 | if (sub_path_w[0] == '.' and sub_path_w[1] == 0) { | 113 | if (sub_path_w[0] == '.' and sub_path_w[1] == 0) { |
| ... | @@ -135,6 +136,7 @@ pub fn OpenFileW( | ... | @@ -135,6 +136,7 @@ pub fn OpenFileW( |
| 135 | .SecurityQualityOfService = null, | 136 | .SecurityQualityOfService = null, |
| 136 | }; | 137 | }; |
| 137 | var io: IO_STATUS_BLOCK = undefined; | 138 | var io: IO_STATUS_BLOCK = undefined; |
| | 139 | const share_access = share_access_opt orelse FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE; |
| 138 | const rc = ntdll.NtCreateFile( | 140 | const rc = ntdll.NtCreateFile( |
| 139 | &result, | 141 | &result, |
| 140 | access_mask, | 142 | access_mask, |
| ... | @@ -142,7 +144,7 @@ pub fn OpenFileW( | ... | @@ -142,7 +144,7 @@ pub fn OpenFileW( |
| 142 | &io, | 144 | &io, |
| 143 | null, | 145 | null, |
| 144 | FILE_ATTRIBUTE_NORMAL, | 146 | FILE_ATTRIBUTE_NORMAL, |
| 145 | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, | 147 | share_access, |
| 146 | creation, | 148 | creation, |
| 147 | FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, | 149 | FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, |
| 148 | null, | 150 | null, |