options |= FILE_SEQUENTIAL_ONLY;
}
retry:
- status = (*func_NtOpenFile)(h_ret, perms, &attr, &iosb,
- FILE_SHARE_VALID_FLAGS, options);
+ status = NtOpenFile(h_ret, perms, &attr, &iosb,
+ FILE_SHARE_VALID_FLAGS, options);
if (!NT_SUCCESS(status)) {
/* Try requesting fewer permissions */
if (status == STATUS_ACCESS_DENIED ||
u64 bytes_remaining;
int ret;
- status = (*func_NtOpenFile)(&h, FILE_READ_DATA | SYNCHRONIZE,
- &attr, &iosb,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_REPARSE_POINT |
- FILE_OPEN_FOR_BACKUP_INTENT |
- FILE_SYNCHRONOUS_IO_NONALERT |
- FILE_SEQUENTIAL_ONLY |
- (file->is_file_id ? FILE_OPEN_BY_FILE_ID : 0));
+ status = NtOpenFile(&h, FILE_READ_DATA | SYNCHRONIZE,
+ &attr, &iosb,
+ FILE_SHARE_VALID_FLAGS,
+ FILE_OPEN_REPARSE_POINT |
+ FILE_OPEN_FOR_BACKUP_INTENT |
+ FILE_SYNCHRONOUS_IO_NONALERT |
+ FILE_SEQUENTIAL_ONLY |
+ (file->is_file_id ? FILE_OPEN_BY_FILE_ID : 0));
if (unlikely(!NT_SUCCESS(status))) {
if (status == STATUS_SHARING_VIOLATION) {
ERROR("Can't open %ls for reading:\n"
count = min(sizeof(buf), bytes_remaining);
retry_read:
- status = (*func_NtReadFile)(h, NULL, NULL, NULL,
- &iosb, buf, count, NULL, NULL);
+ status = NtReadFile(h, NULL, NULL, NULL,
+ &iosb, buf, count, NULL, NULL);
if (unlikely(!NT_SUCCESS(status))) {
if (status == STATUS_END_OF_FILE) {
ERROR("%ls: File was concurrently truncated",
if (ret)
break;
}
- (*func_NtClose)(h);
+ NtClose(h);
return ret;
}
u8 buf[128] _aligned_attribute(8);
const FILE_NAME_INFORMATION *info;
- status = (*func_NtQueryInformationFile)(h, &iosb, buf, sizeof(buf),
- FileAlternateNameInformation);
+ status = NtQueryInformationFile(h, &iosb, buf, sizeof(buf),
+ FileAlternateNameInformation);
info = (const FILE_NAME_INFORMATION *)buf;
if (NT_SUCCESS(status) && info->FileNameLength != 0) {
dentry->d_short_name = utf16le_dupz(info->FileName,
* ntdll function and therefore not officially part of the Win32 API.
* Oh well.
*/
- while (!(NT_SUCCESS(status = (*func_NtQuerySecurityObject)(h,
- requestedInformation,
- (PSECURITY_DESCRIPTOR)buf,
- bufsize,
- &len_needed))))
+ while (!NT_SUCCESS(status = NtQuerySecurityObject(h,
+ requestedInformation,
+ (PSECURITY_DESCRIPTOR)buf,
+ bufsize,
+ &len_needed)))
{
switch (status) {
case STATUS_BUFFER_TOO_SMALL:
}
}
+ /* We can get a length of 0 with Samba. Assume that means "no security
+ * descriptor". */
+ if (len_needed == 0)
+ goto out;
+
/* Add the security descriptor to the WIM image, and save its ID in
- * file's inode. */
+ * the file's inode. */
inode->i_security_id = sd_set_add_sd(ctx->params->sd_set, buf, len_needed);
if (unlikely(inode->i_security_id < 0))
status = STATUS_NO_MEMORY;
/* Using NtQueryDirectoryFile() we can re-use the same open handle,
* which we opened with FILE_FLAG_BACKUP_SEMANTICS. */
- while (NT_SUCCESS(status = (*func_NtQueryDirectoryFile)(h, NULL, NULL, NULL,
- &iosb, buf, bufsize,
- FileNamesInformation,
- FALSE, NULL, FALSE)))
+ while (NT_SUCCESS(status = NtQueryDirectoryFile(h, NULL, NULL, NULL,
+ &iosb, buf, bufsize,
+ FileNamesInformation,
+ FALSE, NULL, FALSE)))
{
const FILE_NAMES_INFORMATION *info = buf;
for (;;) {
FILE_INTERNAL_INFORMATION int_info;
FILE_FS_VOLUME_INFORMATION vol_info;
- status = (*func_NtQueryInformationFile)(h, &iosb,
- &int_info, sizeof(int_info),
- FileInternalInformation);
+ status = NtQueryInformationFile(h, &iosb, &int_info, sizeof(int_info),
+ FileInternalInformation);
if (!NT_SUCCESS(status))
return false;
if (int_info.IndexNumber.QuadPart != ino)
return false;
- status = (*func_NtQueryVolumeInformationFile)(h, &iosb,
- &vol_info, sizeof(vol_info),
- FileFsVolumeInformation);
+ status = NtQueryVolumeInformationFile(h, &iosb,
+ &vol_info, sizeof(vol_info),
+ FileFsVolumeInformation);
if (!(NT_SUCCESS(status) || status == STATUS_BUFFER_OVERFLOW))
return false;
name.MaximumLength = name.Length;
/* Try opening the file */
- status = (*func_NtOpenFile) (&h,
- FILE_READ_ATTRIBUTES | FILE_TRAVERSE,
- &attr,
- &iosb,
- FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
+ status = NtOpenFile(&h,
+ FILE_READ_ATTRIBUTES | FILE_TRAVERSE,
+ &attr,
+ &iosb,
+ FILE_SHARE_VALID_FLAGS,
+ FILE_OPEN_FOR_BACKUP_INTENT);
if (NT_SUCCESS(status)) {
/* Reset root directory */
if (attr.RootDirectory)
- (*func_NtClose)(attr.RootDirectory);
+ NtClose(attr.RootDirectory);
attr.RootDirectory = h;
name.Buffer = (wchar_t *)p;
name.Length = 0;
out_close_root_dir:
if (attr.RootDirectory)
- (*func_NtClose)(attr.RootDirectory);
+ NtClose(attr.RootDirectory);
while (p > target && *(p - 1) == L'\\')
p--;
return p;
goto unnamed_only;
/* Get a buffer containing the stream information. */
- while (!NT_SUCCESS(status = (*func_NtQueryInformationFile)(h,
- &iosb,
- buf,
- bufsize,
- FileStreamInformation)))
+ while (!NT_SUCCESS(status = NtQueryInformationFile(h,
+ &iosb,
+ buf,
+ bufsize,
+ FileStreamInformation)))
{
switch (status) {
NTSTATUS status;
FILE_ALL_INFORMATION all_info;
- status = (*func_NtQueryInformationFile)(h, &iosb, &all_info,
- sizeof(all_info),
- FileAllInformation);
+ status = NtQueryInformationFile(h, &iosb, &all_info, sizeof(all_info),
+ FileAllInformation);
if (unlikely(!NT_SUCCESS(status) && status != STATUS_BUFFER_OVERFLOW))
return status;
NTSTATUS status;
/* Get volume flags */
- status = (*func_NtQueryVolumeInformationFile)(h, &iosb, attr_info,
- sizeof(_attr_info),
- FileFsAttributeInformation);
+ status = NtQueryVolumeInformationFile(h, &iosb, attr_info,
+ sizeof(_attr_info),
+ FileFsAttributeInformation);
if (NT_SUCCESS(status)) {
ctx->vol_flags = attr_info->FileSystemAttributes;
ctx->is_ntfs = (attr_info->FileSystemNameLength == 4 * sizeof(wchar_t)) &&
}
/* Get volume ID. */
- status = (*func_NtQueryVolumeInformationFile)(h, &iosb, &vol_info,
- sizeof(vol_info),
- FileFsVolumeInformation);
+ status = NtQueryVolumeInformationFile(h, &iosb, &vol_info,
+ sizeof(vol_info),
+ FileFsVolumeInformation);
if ((NT_SUCCESS(status) || status == STATUS_BUFFER_OVERFLOW) &&
(iosb.Information >= offsetof(FILE_FS_VOLUME_INFORMATION,
VolumeSerialNumber) +
* ERROR_SHARING_VIOLATION if there are any open handles to the
* file, we have to close the file and re-open it later if
* needed. */
- (*func_NtClose)(h);
+ NtClose(h);
h = NULL;
ret = winnt_scan_efsrpc_raw_data(inode, full_path,
full_path_nchars, ctx);
/* Re-open the directory with FILE_LIST_DIRECTORY access. */
if (h) {
- (*func_NtClose)(h);
+ NtClose(h);
h = NULL;
}
status = winnt_openat(cur_dir, relative_path,
ret = do_capture_progress(ctx->params, WIMLIB_SCAN_DENTRY_EXCLUDED, NULL);
out:
if (likely(h))
- (*func_NtClose)(h);
+ NtClose(h);
if (unlikely(ret)) {
free_dentry_tree(root, ctx->params->blob_table);
root = NULL;
ret = 0;
out:
FREE(out);
- (*func_NtClose)(h);
+ NtClose(h);
return ret;
}
goto out;
}
ret = winnt_load_security_descriptor(h, inode, path, ctx);
- (*func_NtClose)(h);
+ NtClose(h);
if (ret)
goto out;
get_volume_information(h, path, &ctx);
- (*func_NtClose)(h);
+ NtClose(h);
#ifdef ENABLE_FAST_MFT_SCAN
if (ctx.is_ntfs && !_wgetenv(L"WIMLIB_DISABLE_QUERY_FILE_LAYOUT")) {