ReactOS 0.4.17-dev-684-ga6524ef
fileinfo.c File Reference
#include <k32.h>
#include <debug.h>
Include dependency graph for fileinfo.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

 DEBUG_CHANNEL (kernel32file)
 
BOOL WINAPI FlushFileBuffers (IN HANDLE hFile)
 
DWORD WINAPI DECLSPEC_HOTPATCH SetFilePointer (HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod)
 
BOOL WINAPI SetFilePointerEx (HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
 
DWORD WINAPI GetFileType (HANDLE hFile)
 
DWORD WINAPI GetFileSize (HANDLE hFile, LPDWORD lpFileSizeHigh)
 
BOOL WINAPI GetFileSizeEx (HANDLE hFile, PLARGE_INTEGER lpFileSize)
 
DWORD WINAPI GetCompressedFileSizeW (LPCWSTR lpFileName, LPDWORD lpFileSizeHigh)
 
BOOL WINAPI GetFileInformationByHandle (HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
 
BOOL WINAPI GetFileAttributesExW (LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
 
BOOL WINAPI GetFileAttributesExA (LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
 
DWORD WINAPI GetFileAttributesA (LPCSTR lpFileName)
 
DWORD WINAPI GetFileAttributesW (LPCWSTR lpFileName)
 
BOOL WINAPI GetFileAttributesByHandle (IN HANDLE hFile, OUT LPDWORD dwFileAttributes, IN DWORD dwFlags)
 
BOOL WINAPI SetFileAttributesByHandle (IN HANDLE hFile, IN DWORD dwFileAttributes, IN DWORD dwFlags)
 
BOOL WINAPI SetFileAttributesA (LPCSTR lpFileName, DWORD dwFileAttributes)
 
BOOL WINAPI SetFileAttributesW (LPCWSTR lpFileName, DWORD dwFileAttributes)
 
BOOL WINAPI GetFileTime (IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
 
BOOL WINAPI SetFileTime (IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
 
BOOL WINAPI SetEndOfFile (HANDLE hFile)
 
BOOL WINAPI SetFileValidData (HANDLE hFile, LONGLONG ValidDataLength)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 15 of file fileinfo.c.

Function Documentation

◆ DEBUG_CHANNEL()

DEBUG_CHANNEL ( kernel32file  )

◆ FlushFileBuffers()

BOOL WINAPI FlushFileBuffers ( IN HANDLE  hFile)

Definition at line 25 of file fileinfo.c.

26{
29
31
33 {
35 }
36
39 if (!NT_SUCCESS(Status))
40 {
42 return FALSE;
43 }
44 return TRUE;
45}
LONG NTSTATUS
Definition: precomp.h:26
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:220
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
HANDLE TranslateStdHandle(IN HANDLE hHandle)
Definition: handle.c:19
Status
Definition: gdiplustypes.h:24
NTSTATUS NTAPI NtFlushBuffersFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock)
Definition: iofunc.c:1487
_In_ HANDLE hFile
Definition: mswsock.h:90
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:100
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define IsConsoleHandle(h)
Definition: console.h:14

Referenced by _commit(), _test_flush_sync(), BasepMoveFileCopyProgress(), ConStreamSetOSHandle(), DosFlushFileBuffers(), flush_proc(), InstanceThread(), pipe_thread(), rpcrt4_conn_np_close(), CJournaledTestList::SerializeIntoJournal(), serverThreadMain1(), serverThreadMain2(), serverThreadMain3(), serverThreadMain4(), serverThreadMain5(), test_FlushConsoleInputBuffer(), test_FlushFileBuffers(), test_FreeConsole(), test_get_digest_stream(), test_sip_create_indirect_data(), test_waittxempty(), UninitLogging(), UnmountDisk(), CJournaledTestList::UpdateJournal(), and CJournaledTestList::WriteInitialJournalFile().

◆ GetCompressedFileSizeW()

DWORD WINAPI GetCompressedFileSizeW ( LPCWSTR  lpFileName,
LPDWORD  lpFileSizeHigh 
)

Definition at line 397 of file fileinfo.c.

399{
400 FILE_COMPRESSION_INFORMATION FileCompression;
401 NTSTATUS errCode;
404
408 NULL,
411 NULL);
412
414 return INVALID_FILE_SIZE;
415
418 &FileCompression,
421
423
424 if (!NT_SUCCESS(errCode))
425 {
426 BaseSetLastNTError(errCode);
427 return INVALID_FILE_SIZE;
428 }
429
430 if(lpFileSizeHigh)
431 *lpFileSizeHigh = FileCompression.CompressedFileSize.u.HighPart;
432
434 return FileCompression.CompressedFileSize.u.LowPart;
435}
#define NO_ERROR
Definition: dderror.h:5
#define NULL
Definition: types.h:112
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define SetLastError(x)
Definition: compat.h:752
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
@ FileCompressionInformation
Definition: from_kernel.h:89
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
LARGE_INTEGER CompressedFileSize
Definition: iotypes.h:5852
struct _LARGE_INTEGER::@2524 u
_In_ LPCSTR lpFileName
Definition: winbase.h:2800
#define INVALID_FILE_SIZE
Definition: winbase.h:528

◆ GetFileAttributesA()

DWORD WINAPI GetFileAttributesA ( LPCSTR  lpFileName)

Definition at line 620 of file fileinfo.c.

621{
622 PWSTR FileNameW;
623
624 if (!lpFileName || !(FileNameW = FilenameA2W(lpFileName, FALSE)))
626
627 return GetFileAttributesW(FileNameW);
628}
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc)
Definition: fileutils.c:18
uint16_t * PWSTR
Definition: typedefs.h:56
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23

Referenced by check_exists(), check_ini_file_attr(), create_backup(), create_file(), delete_file(), dir_exists(), does_folder_or_file_exist(), DosChangeDirectory(), DosCreateFile(), DosCreateFileEx(), DosInt21h(), DosOpenFile(), enum_gac_assembly_dirs(), Extract(), ExtractFilesA(), fci_open(), fdi_notify_extract(), file_exists(), get_open_info(), init_test(), MACRO_FileExist(), MMIO_Open(), OpenFile(), PathFileExistsA(), PathFileExistsAndAttributesA(), PathIsDirectoryA(), PathIsSystemFolderA(), PathUnmakeSystemFolderA(), pf_exists(), register_service(), search_absolute_directory(), SHAddToRecentDocs(), shell_execute_(), shell_execute_ex_(), SHLWAPI_GetRegistryCompatFlags(), START_TEST(), test_AddDelBackupEntry(), test_backup(), test_catalog_properties(), test_clear(), test_context(), test_create_catalog_file(), test_CreateScalableFontResource(), test_CryptCATAdminAddRemoveCatalog(), test_date_format(), Test_DelNodeA(), test_driver_install(), test_ExitCode(), test_FileSecurity(), test_find_file(), test_FindFirstChangeNotification(), test_get_file_info(), test_GetDisplayName(), test_getfile(), test_info_size(), test_InstallAssembly(), test_keep_attributes(), test_LocalizedNames(), test_LZOpenFileA(), test_mounted_folder(), test_msidatabase(), test_openbackup(), test_parms_syntax(), test_profile_items(), test_QueryAssemblyInfo(), test_registry_mapping(), test_relative_path(), test_settargetpath(), test_SHGetFolderPathAndSubDirA(), test_summary_binary(), test_WritePrivateProfileString(), VerInstallFileA(), VfdInstallDriver(), and xsltCheckFilename().

◆ GetFileAttributesByHandle()

BOOL WINAPI GetFileAttributesByHandle ( IN HANDLE  hFile,
OUT LPDWORD  dwFileAttributes,
IN DWORD  dwFlags 
)

Definition at line 679 of file fileinfo.c.

682{
683 FILE_BASIC_INFORMATION FileBasic;
686
688
690 {
692 return FALSE;
693 }
694
697 &FileBasic,
698 sizeof(FileBasic),
700 if (NT_SUCCESS(Status))
701 {
702 *dwFileAttributes = FileBasic.FileAttributes;
703 return TRUE;
704 }
705
707 return FALSE;
708}
DWORD dwFileAttributes
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
@ FileBasicInformation
Definition: from_kernel.h:65
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329

◆ GetFileAttributesExA()

BOOL WINAPI GetFileAttributesExA ( LPCSTR  lpFileName,
GET_FILEEX_INFO_LEVELS  fInfoLevelId,
LPVOID  lpFileInformation 
)

Definition at line 603 of file fileinfo.c.

606{
607 PWCHAR FileNameW;
608
609 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
610 return FALSE;
611
612 return GetFileAttributesExW(FileNameW, fInfoLevelId, lpFileInformation);
613}
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
Definition: fileinfo.c:536
uint16_t * PWCHAR
Definition: typedefs.h:56

◆ GetFileAttributesExW()

BOOL WINAPI GetFileAttributesExW ( LPCWSTR  lpFileName,
GET_FILEEX_INFO_LEVELS  fInfoLevelId,
LPVOID  lpFileInformation 
)

Definition at line 536 of file fileinfo.c.

539{
544 WIN32_FILE_ATTRIBUTE_DATA* FileAttributeData;
545
546 TRACE("GetFileAttributesExW(%S) called\n", lpFileName);
547
548
549 if (fInfoLevelId != GetFileExInfoStandard || lpFileInformation == NULL)
550 {
552 return FALSE;
553 }
554
555 /* Validate and translate the filename */
557 &FileName,
558 NULL,
559 NULL))
560 {
561 WARN ("Invalid path '%S'\n", lpFileName);
563 return FALSE;
564 }
565
566 /* build the object attributes */
568 &FileName,
570 NULL,
571 NULL);
572
573 /* Get file attributes */
576
578 if (!NT_SUCCESS (Status))
579 {
580 WARN ("NtQueryFullAttributesFile() failed (Status %lx)\n", Status);
582 return FALSE;
583 }
584
585 FileAttributeData = (WIN32_FILE_ATTRIBUTE_DATA*)lpFileInformation;
586 FileAttributeData->dwFileAttributes = FileInformation.FileAttributes;
587 FileAttributeData->ftCreationTime.dwLowDateTime = FileInformation.CreationTime.u.LowPart;
588 FileAttributeData->ftCreationTime.dwHighDateTime = FileInformation.CreationTime.u.HighPart;
589 FileAttributeData->ftLastAccessTime.dwLowDateTime = FileInformation.LastAccessTime.u.LowPart;
590 FileAttributeData->ftLastAccessTime.dwHighDateTime = FileInformation.LastAccessTime.u.HighPart;
591 FileAttributeData->ftLastWriteTime.dwLowDateTime = FileInformation.LastWriteTime.u.LowPart;
592 FileAttributeData->ftLastWriteTime.dwHighDateTime = FileInformation.LastWriteTime.u.HighPart;
593 FileAttributeData->nFileSizeLow = FileInformation.EndOfFile.u.LowPart;
594 FileAttributeData->nFileSizeHigh = FileInformation.EndOfFile.u.HighPart;
595
596 return TRUE;
597}
#define WARN(fmt,...)
Definition: precomp.h:61
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
struct _FileName FileName
Definition: fatprocs.h:897
@ GetFileExInfoStandard
Definition: minwinbase.h:356
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:115
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
static OUT PIO_STATUS_BLOCK OUT PVOID FileInformation
Definition: pipe.c:100
NTSTATUS NTAPI NtQueryFullAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation)
Definition: file.c:3989
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
#define ERROR_BAD_PATHNAME
Definition: winerror.h:355

Referenced by _waccess_s(), _wchmod(), file_get_DateLastModified(), FileMonikerImpl_GetTimeOfLastChange(), GetFileAttributesExA(), CFileDefExt::InitFileAttr(), InitPropertiesDlg(), urlcache_delete_file(), and urlcache_entry_commit().

◆ GetFileAttributesW()

DWORD WINAPI GetFileAttributesW ( LPCWSTR  lpFileName)

Definition at line 636 of file fileinfo.c.

637{
642
643 /* Get the NT path name */
645 {
648 }
649
650 /* Prepare for querying attributes */
653 NULL, NULL);
654 /* Simply query attributes */
656 RtlFreeHeap(RtlGetProcessHeap(), 0, FileName.Buffer);
657 if (!NT_SUCCESS(Status))
658 {
659 /* It failed? Is it a DOS device? */
661 {
663 }
664
665 /* Set the error otherwise */
668 }
669
670 /* Return the file attributes */
671 return FileInformation.FileAttributes;
672}
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
NTSYSAPI ULONG NTAPI RtlIsDosDeviceName_U(_In_ PCWSTR Name)
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
NTSTATUS NTAPI NtQueryAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_BASIC_INFORMATION FileInformation)
Definition: file.c:3977
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228

Referenced by _tWinMain(), _wsearchenv_s(), ACTION_ResolveSource(), AddSubst(), cabinet_next_cabinet(), cache_QueryAssemblyInfo(), CJournaledTestList::CJournaledTestList(), BtrfsRecv::cmd_removexattr(), BtrfsRecv::cmd_rmdir(), BtrfsRecv::cmd_setxattr(), BtrfsRecv::cmd_truncate(), BtrfsRecv::cmd_unlink(), BtrfsRecv::cmd_write(), compat_isdir(), copy_file(), copy_folder(), create_file(), create_fileW(), create_temp_dir(), CreateProcessInternalW(), delete_fileW(), RecycleBin5::DeleteFile(), DELNODE_recurse_dirtree(), DllRegisterServer(), do_file_copyW(), BtrfsRecv::do_recv(), DoEntry(), DoesFileExist(), DoWriteSoundEvents(), ExpandInstallerPath(), ExtractArchiveForExecution(), file_dlg_proc(), file_exists(), file_existsW(), file_get_Attributes(), FileExists(), FileExistsW(), FileMoniker_CreateFromDisplayName(), filesys_FileExists(), filesys_FolderExists(), filesys_GetFolder(), find_mono_dll(), find_published_source(), FolderBrowseCallback(), CFileDefExt::GeneralPageProc(), get_empty_cddrive(), get_fusion_filename(), get_unique_folder_name(), get_working_dir(), CSearchBar::GetAddressEditBoxLocations(), RecycleBin5File::GetAttributes(), CConfiguration::GetConfigurationFromFile(), GetFileAttributesA(), RecycleBin5File::GetFileSize(), RecycleBin5File::GetLastModificationTime(), GetLongPathNameW(), GetShortPathNameW(), GetTempFileNameW(), GetVersionFromFileExW(), HandleDesktopIniOp(), IAssemblyCacheImpl_InstallAssembly(), RecycleBin5File::Init(), InstallSoftwareBusPnpEnumerator(), IntDeleteRecursive(), IntLoadKeyboardLayout(), LayoutList_ReadLayout(), load_mui_string(), LoadUserProfileW(), LocalScheduleJob(), MainWnd_OnInstall(), msi_create_temp_file(), msi_get_file_attributes(), MSI_GetComponentPath(), MSI_OpenPackageW(), MSI_OpenProductW(), msvcrt_search_executable(), NewActionDlg_OnOK(), CFileDefExt::OnFolderCustApply(), open_package(), parse_file_list(), PathFileExistsAndAttributesW(), PathFileExistsDefExtAndAttributesW(), PathFileExistsW(), PathIsDirectoryW(), PathIsSystemFolderW(), PathIsTemporaryW(), PathMakeSystemFolderW(), PathProcessCommandW(), PathUnmakeSystemFolderW(), CDownloadManager::PerformDownloadAndInstall(), PickIconDlg(), ready_media(), resolve_filename(), RunDlg_GetParentDir(), SdbpFileExists(), anonymous_namespace{settingsdlg.cpp}::SettingsDlgProc(), SetupPromptForDiskW(), SHELL_ExecuteW(), SHELL_ExistsFileW(), SHELL_FindExecutable(), shell_item_exists(), SHELL_translate_idlist(), ShellExecCmdLine(), SHGetFileInfoW(), SHGetFolderPathAndSubDirW(), SHGetNewLinkInfoW(), SHNotifyCopyFileW(), SHNotifyDeleteFileW(), SHNotifyMoveFileW(), SHNotifyRemoveDirectoryW(), SHPathPrepareForWriteW(), START_TEST(), StartDocDlgW(), test_CopyFolder(), test_debug_loop(), test_debug_loop_wow64(), Test_DelNodeW(), test_GetFile(), test_knownFolders(), test_LZOpenFileW(), test_wshshell(), WhereIsRecursiveDirOK(), XCOPY_DoCopy(), XCOPY_ProcessDestParm(), and XCOPY_ProcessSourceParm().

◆ GetFileInformationByHandle()

BOOL WINAPI GetFileInformationByHandle ( HANDLE  hFile,
LPBY_HANDLE_FILE_INFORMATION  lpFileInformation 
)

Definition at line 442 of file fileinfo.c.

444{
445 struct
446 {
447 FILE_FS_VOLUME_INFORMATION FileFsVolume;
448 WCHAR Name[255];
449 }
450 FileFsVolume;
451
452 FILE_BASIC_INFORMATION FileBasic;
453 FILE_INTERNAL_INFORMATION FileInternal;
454 FILE_STANDARD_INFORMATION FileStandard;
455 NTSTATUS errCode;
457
459 {
461 return FALSE;
462 }
463
466 &FileBasic,
469 if (!NT_SUCCESS(errCode))
470 {
471 BaseSetLastNTError(errCode);
472 return FALSE;
473 }
474
475 lpFileInformation->dwFileAttributes = (DWORD)FileBasic.FileAttributes;
476
477 lpFileInformation->ftCreationTime.dwHighDateTime = FileBasic.CreationTime.u.HighPart;
478 lpFileInformation->ftCreationTime.dwLowDateTime = FileBasic.CreationTime.u.LowPart;
479
480 lpFileInformation->ftLastAccessTime.dwHighDateTime = FileBasic.LastAccessTime.u.HighPart;
481 lpFileInformation->ftLastAccessTime.dwLowDateTime = FileBasic.LastAccessTime.u.LowPart;
482
483 lpFileInformation->ftLastWriteTime.dwHighDateTime = FileBasic.LastWriteTime.u.HighPart;
484 lpFileInformation->ftLastWriteTime.dwLowDateTime = FileBasic.LastWriteTime.u.LowPart;
485
488 &FileInternal,
491 if (!NT_SUCCESS(errCode))
492 {
493 BaseSetLastNTError(errCode);
494 return FALSE;
495 }
496
497 lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
498 lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
499
502 &FileFsVolume,
503 sizeof(FileFsVolume),
505 if (!NT_SUCCESS(errCode))
506 {
507 BaseSetLastNTError(errCode);
508 return FALSE;
509 }
510
511 lpFileInformation->dwVolumeSerialNumber = FileFsVolume.FileFsVolume.VolumeSerialNumber;
512
515 &FileStandard,
518 if (!NT_SUCCESS(errCode))
519 {
520 BaseSetLastNTError(errCode);
521 return FALSE;
522 }
523
524 lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
525 lpFileInformation->nFileSizeHigh = FileStandard.EndOfFile.u.HighPart;
526 lpFileInformation->nFileSizeLow = FileStandard.EndOfFile.u.LowPart;
527
528 return TRUE;
529}
LPWSTR Name
Definition: desk.c:124
@ FileInternalInformation
Definition: from_kernel.h:67
@ FileFsVolumeInformation
Definition: from_kernel.h:219
#define DWORD
Definition: nt_native.h:44
short WCHAR
Definition: pedump.c:58
#define FileStandardInformation
Definition: propsheet.cpp:61
NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FsInformation, ULONG Length, FS_INFORMATION_CLASS FsInformationClass)
LARGE_INTEGER LastWriteTime
Definition: nt_native.h:944
LARGE_INTEGER CreationTime
Definition: nt_native.h:942
LARGE_INTEGER LastAccessTime
Definition: nt_native.h:943

Referenced by __is_regular_file(), BtrfsPropSheet::apply_changes_file(), BtrfsPropSheet::check_file(), common_stat_handle_file_opened(), count_blocks(), filestream_Stat(), FTP_SendData(), get_open_info(), DriveVolume::GetClusterInfo(), MountDisk(), ReflinkCopyW(), BtrfsPropSheet::set_cmdline(), BtrfsSend::Thread(), and VfdOpenImage().

◆ GetFileSize()

DWORD WINAPI GetFileSize ( HANDLE  hFile,
LPDWORD  lpFileSizeHigh 
)

Definition at line 331 of file fileinfo.c.

333{
334 NTSTATUS errCode;
335 FILE_STANDARD_INFORMATION FileStandard;
337
340 &FileStandard,
343 if (!NT_SUCCESS(errCode))
344 {
345 BaseSetLastNTError(errCode);
346 if ( lpFileSizeHigh == NULL )
347 {
348 return -1;
349 }
350 else
351 {
352 return 0;
353 }
354 }
355 if ( lpFileSizeHigh != NULL )
356 *lpFileSizeHigh = FileStandard.EndOfFile.u.HighPart;
357
358 return FileStandard.EndOfFile.u.LowPart;
359}

Referenced by __file_size(), _check_file_size(), asn_dump(), ata_bblk(), BatchFile2Mem(), cache_container_open_index(), check_binary_file_data(), check_exe(), check_pe_exe(), compare_file_(), compare_mf_disk_bits(), create_mapping(), create_stream(), create_stream_on_file(), create_test_dll(), create_test_dll_sections(), CRYPT_FileNameOpenStoreW(), CRYPT_ReadBlobFromFile(), CryptCATOpen(), CryptSIPRetrieveSubjectGuid(), D3DReadFileToBlob(), d3dx_include_from_file_open(), DECLARE_INTERFACE_(), RecycleBin5::DeleteFile(), DoImport(), DosCheckInput(), DosCreateFile(), DosCreateFileEx(), DosLoadDriver(), DosLoadExecutable(), DosOpenFile(), DoTypeFile(), EMF_GetEnhMetaFile(), CShellCommandSetValue::Execute(), ATL::CRegObject::file_register(), file_register(), FileAsyncReader_Length(), FileLockBytesImpl_Stat(), FileOpen(), get_estimated_size(), get_file_size(), get_pf_file_size(), get_script_from_file(), get_script_str(), getFileSize(), HANDLE_CustomType21_22(), ICO_ExtractIconExW(), IDirectXFileImpl_CreateEnumObject(), ImageAddCertificate(), ImageGetDigestStream(), IMAGEHLP_RecalculateChecksum(), ImageRemoveCertificate(), InitFont(), is_zero_length(), load_font(), load_script(), LoadCodePageData(), LoadImageFromFileHandle(), CJournaledTestList::LoadJournalFile(), LoadTextFileToEdit(), map_file(), map_fileW(), map_view_of_file(), MapAndLoad(), MapFile(), ATL::CAtlFileMappingBase::MapFile(), MapFileAndCheckSumA(), MapFileAndCheckSumW(), MMIO_Open(), MountDisk(), MountFDI(), msi_get_disk_file_size(), msi_get_filehash(), RecycleBin5Enum::Next(), NLS_ReadFile(), OLECONVERT_WriteOLE20ToBuffer(), OpenColorProfileW(), parse_file(), pe_image_hash(), PROFILE_Load(), pSetupOpenAndMapFileForRead(), query_image_section(), read_text_archive(), ReadJobShadowFile(), ReadRdpFile(), ReadText(), RECORD_StreamFromFile(), RecycleBin5::RemoveFromDatabase(), RetrieveQuote(), SearchFile(), CHttpClient::SendFile(), sha_check(), StgOpenStorage(), test_enhmetafile_file(), test_FileMapping(), test_http_cache(), test_metafile_file(), test_overwrite(), test_ReadConsole(), Test_ReadFile_async(), testFileStore(), TLB_Mapping_Open(), VfdCheckImageFile(), VfdOpenImage(), WINTRUST_GetSignedMsgFromCatFile(), wmain(), and WriteJobShadowFile().

◆ GetFileSizeEx()

BOOL WINAPI GetFileSizeEx ( HANDLE  hFile,
PLARGE_INTEGER  lpFileSize 
)

Definition at line 367 of file fileinfo.c.

371{
372 NTSTATUS errCode;
373 FILE_STANDARD_INFORMATION FileStandard;
375
378 &FileStandard,
381 if (!NT_SUCCESS(errCode))
382 {
383 BaseSetLastNTError(errCode);
384 return FALSE;
385 }
386 if (lpFileSize)
387 *lpFileSize = FileStandard.EndOfFile;
388
389 return TRUE;
390}

◆ GetFileTime()

BOOL WINAPI GetFileTime ( IN HANDLE  hFile,
OUT LPFILETIME lpCreationTime  OPTIONAL,
OUT LPFILETIME lpLastAccessTime  OPTIONAL,
OUT LPFILETIME lpLastWriteTime  OPTIONAL 
)

Definition at line 881 of file fileinfo.c.

885{
888 FILE_BASIC_INFORMATION FileBasic;
889
891 {
893 return FALSE;
894 }
895
898 &FileBasic,
901 if (!NT_SUCCESS(Status))
902 {
904 return FALSE;
905 }
906
907 if (lpCreationTime)
908 {
909 lpCreationTime->dwLowDateTime = FileBasic.CreationTime.LowPart;
910 lpCreationTime->dwHighDateTime = FileBasic.CreationTime.HighPart;
911 }
912
913 if (lpLastAccessTime)
914 {
915 lpLastAccessTime->dwLowDateTime = FileBasic.LastAccessTime.LowPart;
916 lpLastAccessTime->dwHighDateTime = FileBasic.LastAccessTime.HighPart;
917 }
918
919 if (lpLastWriteTime)
920 {
921 lpLastWriteTime->dwLowDateTime = FileBasic.LastWriteTime.LowPart;
922 lpLastWriteTime->dwHighDateTime = FileBasic.LastWriteTime.HighPart;
923 }
924
925 return TRUE;
926}
#define STATUS_INVALID_HANDLE
Definition: d3dkmdt.h:40
ULONG LowPart
Definition: typedefs.h:106

Referenced by AddKnownDriverToList(), copy(), RecycleBin5::DeleteFile(), DoGetFileTimeInfo(), DosInt21h(), File_RetrieveEncodedObjectW(), GetFileModifyTime(), CCabinet::GetFileTimes(), RecycleBin5File::GetLastModificationTime(), GetSetFileTimestamp(), LZCopy(), PROFILE_FlushFile(), PROFILE_Open(), ProtocolStream_Stat(), replace(), SOFTPUB_OpenFile(), Test_LongTests(), test_RealizationInfo(), Test_VeryLongTests(), wmain(), and XCOPY_DoCopy().

◆ GetFileType()

DWORD WINAPI GetFileType ( HANDLE  hFile)

Definition at line 269 of file fileinfo.c.

270{
272 IO_STATUS_BLOCK StatusBlock;
274
275 /* Get real handle */
277
278 /* Check for console handle */
280 {
282 return FILE_TYPE_CHAR;
283 }
284
286 &StatusBlock,
287 &DeviceInfo,
290 if (!NT_SUCCESS(Status))
291 {
293 return FILE_TYPE_UNKNOWN;
294 }
295
296 switch (DeviceInfo.DeviceType)
297 {
302 case FILE_DEVICE_DFS:
303 case FILE_DEVICE_DISK:
306 return FILE_TYPE_DISK;
307
310 case FILE_DEVICE_NULL:
317 return FILE_TYPE_CHAR;
318
320 return FILE_TYPE_PIPE;
321 }
322
323 return FILE_TYPE_UNKNOWN;
324}
BOOL WINAPI DECLSPEC_HOTPATCH VerifyConsoleIoHandle(HANDLE hIoHandle)
Definition: console.c:1112
@ FileFsDeviceInformation
Definition: from_kernel.h:222
#define FILE_DEVICE_SERIAL_PORT
Definition: serial.c:44
#define FILE_DEVICE_DISK_FILE_SYSTEM
Definition: winioctl.h:53
#define FILE_DEVICE_NAMED_PIPE
Definition: winioctl.h:62
#define FILE_DEVICE_MOUSE
Definition: winioctl.h:60
#define FILE_DEVICE_NULL
Definition: winioctl.h:66
#define FILE_DEVICE_CD_ROM
Definition: winioctl.h:47
#define FILE_DEVICE_SCREEN
Definition: winioctl.h:73
#define FILE_DEVICE_DFS
Definition: winioctl.h:51
#define FILE_DEVICE_KEYBOARD
Definition: winioctl.h:56
#define FILE_DEVICE_DATALINK
Definition: winioctl.h:50
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
Definition: winioctl.h:48
#define FILE_DEVICE_MODEM
Definition: winioctl.h:88
#define FILE_DEVICE_PARALLEL_PORT
Definition: winioctl.h:67
#define FILE_DEVICE_CONTROLLER
Definition: winioctl.h:49
#define FILE_DEVICE_SOUND
Definition: winioctl.h:74
#define FILE_DEVICE_DISK
Definition: winioctl.h:52
#define FILE_DEVICE_PRINTER
Definition: winioctl.h:69
#define FILE_DEVICE_VIRTUAL_DISK
Definition: winioctl.h:81
#define FILE_TYPE_UNKNOWN
Definition: winbase.h:283
#define FILE_TYPE_CHAR
Definition: winbase.h:285
#define FILE_TYPE_PIPE
Definition: winbase.h:286
#define FILE_TYPE_DISK
Definition: winbase.h:284

Referenced by _open_osfhandle(), _VCrtDbgReportW(), _wsopen_nolock(), common_assert_to_stderr_direct(), common_stat_handle_file_opened(), DoTypeFile(), encode_handle_attributes(), FormatOutput(), getpass(), initialize_inherited_file_handles_nolock(), initialize_stdio_handles_nolock(), IsConsoleHandle(), IsTTYHandle(), main(), run_open_osfhandle(), START_TEST(), test_file_info(), test_FreeConsole(), and wmain().

◆ SetEndOfFile()

BOOL WINAPI SetEndOfFile ( HANDLE  hFile)

Definition at line 989 of file fileinfo.c.

990{
992 FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
994 FILE_POSITION_INFORMATION FilePosInfo;
996
998 {
1000 return FALSE;
1001 }
1002
1003 //get current position
1005 hFile,
1007 &FilePosInfo,
1010 );
1011
1012 if (!NT_SUCCESS(Status)){
1014 return FALSE;
1015 }
1016
1017 EndOfFileInfo.EndOfFile.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1018
1019 /*
1020 NOTE:
1021 This call is not supposed to free up any space after the eof marker
1022 if the file gets truncated. We have to deallocate the space explicitly afterwards.
1023 But...most file systems dispatch both FileEndOfFileInformation
1024 and FileAllocationInformation as they were the same command.
1025
1026 */
1028 hFile,
1029 &IoStatusBlock, //out
1030 &EndOfFileInfo,
1033 );
1034
1035 if (!NT_SUCCESS(Status)){
1037 return FALSE;
1038 }
1039
1040 FileAllocationInfo.AllocationSize.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1041
1042
1044 hFile,
1045 &IoStatusBlock, //out
1049 );
1050
1051 if (!NT_SUCCESS(Status)){
1053 return FALSE;
1054 }
1055
1056 return TRUE;
1057
1058}
@ FilePositionInformation
Definition: from_kernel.h:75
@ FileEndOfFileInformation
Definition: from_kernel.h:81
@ FileAllocationInformation
Definition: from_kernel.h:80
@ FileAllocationInfo
Definition: minwinbase.h:309
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
Definition: iofunc.c:3096
LARGE_INTEGER CurrentByteOffset
Definition: nt_native.h:958
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by _chsize_nolock_internal(), _hwrite(), cache_container_set_size(), BtrfsRecv::cmd_clone(), BtrfsRecv::cmd_truncate(), create_file_data(), create_test_dll(), RecycleBin5::DeleteFile(), DoSaveFile(), DosWriteFile(), FileLockBytesImpl_SetSize(), filestream_SetSize(), gen_forward_chain_testdll(), ImageRemoveCertificate(), query_image_section(), RecycleBin5::RemoveFromDatabase(), ReplaceFileW(), resize_mapping(), send_subvol(), set_image_size(), test_CreateFileMapping(), test_CreateFileMapping_protection(), test_filemap_security(), test_GetMappedFileName(), test_mappings(), test_MapViewOfFile(), test_NtAreMappedFilesTheSame(), test_NtMapViewOfSection(), test_NtMapViewOfSectionEx(), test_ResolveDelayLoadedAPI(), Test_Truncate(), test_write_watch(), BtrfsSend::Thread(), VfdCreateImageFile(), and VfdSaveImage().

◆ SetFileAttributesA()

BOOL WINAPI SetFileAttributesA ( LPCSTR  lpFileName,
DWORD  dwFileAttributes 
)

Definition at line 761 of file fileinfo.c.

764{
765 PWCHAR FileNameW;
766
767 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
768 return FALSE;
769
770 return SetFileAttributesW(FileNameW, dwFileAttributes);
771}
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:779

Referenced by check_ini_file_attr(), cleanup_test(), doChild(), DosInt21h(), PathUnmakeSystemFolderA(), START_TEST(), test_AddDelBackupEntry(), test_copy(), test_CryptCATAdminAddRemoveCatalog(), test_Extract(), test_FileSecurity(), test_FindFirstChangeNotification(), test_keep_attributes(), and test_LocalizedNames().

◆ SetFileAttributesByHandle()

BOOL WINAPI SetFileAttributesByHandle ( IN HANDLE  hFile,
IN DWORD  dwFileAttributes,
IN DWORD  dwFlags 
)

Definition at line 715 of file fileinfo.c.

718{
719 FILE_BASIC_INFORMATION FileBasic;
722
724
726 {
728 return FALSE;
729 }
730
733 &FileBasic,
734 sizeof(FileBasic),
736 if (NT_SUCCESS(Status))
737 {
739
742 &FileBasic,
743 sizeof(FileBasic),
745 }
746
747 if (!NT_SUCCESS(Status))
748 {
750 return FALSE;
751 }
752
753 return TRUE;
754}

◆ SetFileAttributesW()

BOOL WINAPI SetFileAttributesW ( LPCWSTR  lpFileName,
DWORD  dwFileAttributes 
)

Definition at line 779 of file fileinfo.c.

781{
783 PWSTR PathUBuffer;
785 UNICODE_STRING NtPathU;
787 RTL_RELATIVE_NAME_U RelativeName;
790
791 /* Get relative name */
792 if (!RtlDosPathNameToRelativeNtPathName_U(lpFileName, &NtPathU, NULL, &RelativeName))
793 {
795 return FALSE;
796 }
797
798 /* Save buffer to allow later freeing */
799 PathUBuffer = NtPathU.Buffer;
800
801 /* If we have relative name (and root dir), use them instead */
802 if (RelativeName.RelativeName.Length != 0)
803 {
804 NtPathU.Length = RelativeName.RelativeName.Length;
805 NtPathU.MaximumLength = RelativeName.RelativeName.MaximumLength;
806 NtPathU.Buffer = RelativeName.RelativeName.Buffer;
807 }
808 else
809 {
810 RelativeName.ContainingDirectory = NULL;
811 }
812
813 /* Prepare the object attribute for opening the file */
816 RelativeName.ContainingDirectory, NULL);
817
818 /* Attempt to open the file, while supporting reparse point */
823 /* If opening failed, check whether it was because of reparse point support */
824 if (!NT_SUCCESS(Status))
825 {
826 /* Nope, just quit */
828 {
829 RtlReleaseRelativeName(&RelativeName);
830 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
832
833 return FALSE;
834 }
835
836 /* Yes, retry without */
841 if (!NT_SUCCESS(Status))
842 {
843 RtlReleaseRelativeName(&RelativeName);
844 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
846
847 return FALSE;
848 }
849 }
850
851 /* We don't need strings anylonger */
852 RtlReleaseRelativeName(&RelativeName);
853 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
854
855 /* Zero our structure, we'll only set file attributes */
857 /* Set the attributes, filtering only allowed attributes, and forcing normal attribute */
859
860 /* Finally, set the attributes */
863 /* Close the file */
865
866 /* If it failed, set the error and fail */
867 if (!NT_SUCCESS(Status))
868 {
870
871 return FALSE;
872 }
873
874 return TRUE;
875}
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
#define FILE_OPEN_REPARSE_POINT
Definition: from_kernel.h:46
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define FILE_OPEN_FOR_BACKUP_INTENT
Definition: from_kernel.h:42
#define ZeroMemory
Definition: minwinbase.h:31
VOID NTAPI RtlReleaseRelativeName(_In_ PRTL_RELATIVE_NAME_U RelativeName)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToRelativeNtPathName_U(_In_ PCWSTR DosName, _Out_ PUNICODE_STRING NtName, _Out_ PCWSTR *PartName, _Out_ PRTL_RELATIVE_NAME_U RelativeName)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3951
#define FILE_ATTRIBUTE_VALID_SET_FLAGS
Definition: nt_native.h:715
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define SYNCHRONIZE
Definition: nt_native.h:61
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define FILE_WRITE_ATTRIBUTES
Definition: nt_native.h:649
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3429
UNICODE_STRING RelativeName
Definition: rtltypes.h:1382
HANDLE ContainingDirectory
Definition: rtltypes.h:1383
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135

Referenced by _wchmod(), AddDelBackupEntryW(), BasepCopyFileExW(), ChangeAttributes(), BtrfsRecv::cmd_removexattr(), BtrfsRecv::cmd_rmdir(), BtrfsRecv::cmd_setxattr(), BtrfsRecv::cmd_truncate(), BtrfsRecv::cmd_unlink(), BtrfsRecv::cmd_write(), CreateStandardProfile(), CryptCATAdminAddCatalog(), delete_directory(), delete_file(), DELNODE_recurse_dirtree(), DllRegisterServer(), BtrfsRecv::do_recv(), file_put_Attributes(), CFileDefExt::GeneralPageProc(), InitializeSetupActionLog(), IntDeleteRecursive(), MoveFileWithProgressW(), MSI_OpenPackageW(), msi_set_file_attributes(), CFileDefExt::OnFolderCustApply(), PathMakeSystemFolderW(), PathUnmakeSystemFolderW(), CDownloadManager::PerformDownloadAndInstall(), RecursiveRemoveDir(), RecycleBin5_Create(), SdbUninstall(), SetFileAttributesA(), SetupInitializeFileLogW(), SHGetFolderPathAndSubDirW(), SHNotifyCopyFileW(), SHNotifyDeleteFileW(), SHNotifyMoveFileW(), SHNotifyRemoveDirectoryW(), START_TEST(), test_MultipleFiles(), XCOPY_DoCopy(), and TmpFile::~TmpFile().

◆ SetFilePointer()

DWORD WINAPI DECLSPEC_HOTPATCH SetFilePointer ( HANDLE  hFile,
LONG  lDistanceToMove,
PLONG  lpDistanceToMoveHigh,
DWORD  dwMoveMethod 
)

Definition at line 54 of file fileinfo.c.

58{
59 FILE_POSITION_INFORMATION FilePosition;
60 FILE_STANDARD_INFORMATION FileStandard;
61 NTSTATUS errCode;
63 LARGE_INTEGER Distance;
64
65 TRACE("SetFilePointer(hFile %p, lDistanceToMove %d, dwMoveMethod %lu)\n",
66 hFile,lDistanceToMove,dwMoveMethod);
67
69 {
72 }
73
74 if (lpDistanceToMoveHigh)
75 {
76 Distance.u.HighPart = *lpDistanceToMoveHigh;
77 Distance.u.LowPart = lDistanceToMove;
78 }
79 else
80 {
81 Distance.QuadPart = lDistanceToMove;
82 }
83
84 switch(dwMoveMethod)
85 {
86 case FILE_CURRENT:
89 &FilePosition,
92 FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
93 if (!NT_SUCCESS(errCode))
94 {
95 if (lpDistanceToMoveHigh != NULL)
96 *lpDistanceToMoveHigh = -1;
97 BaseSetLastNTError(errCode);
99 }
100 break;
101 case FILE_END:
104 &FileStandard,
107 FilePosition.CurrentByteOffset.QuadPart =
108 FileStandard.EndOfFile.QuadPart + Distance.QuadPart;
109 if (!NT_SUCCESS(errCode))
110 {
111 if (lpDistanceToMoveHigh != NULL)
112 *lpDistanceToMoveHigh = -1;
113 BaseSetLastNTError(errCode);
115 }
116 break;
117 case FILE_BEGIN:
118 FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart;
119 break;
120 default:
123 }
124
125 if(FilePosition.CurrentByteOffset.QuadPart < 0)
126 {
129 }
130
131 if (lpDistanceToMoveHigh == NULL && FilePosition.CurrentByteOffset.HighPart != 0)
132 {
133 /* If we're moving the pointer outside of the 32 bit boundaries but
134 the application only passed a 32 bit value we need to bail out! */
137 }
138
139 errCode = NtSetInformationFile(hFile,
141 &FilePosition,
144 if (!NT_SUCCESS(errCode))
145 {
146 if (lpDistanceToMoveHigh != NULL)
147 *lpDistanceToMoveHigh = -1;
148
149 BaseSetLastNTError(errCode);
151 }
152
153 if (lpDistanceToMoveHigh != NULL)
154 {
155 *lpDistanceToMoveHigh = FilePosition.CurrentByteOffset.u.HighPart;
156 }
157
158 if (FilePosition.CurrentByteOffset.u.LowPart == MAXDWORD)
159 {
160 /* The value of -1 is valid here, especially when the new
161 file position is greater than 4 GB. Since NtSetInformationFile
162 succeeded we never set an error code and we explicitly need
163 to clear a previously set error code in this case, which
164 an application will check if INVALID_SET_FILE_POINTER is returned! */
166 }
167
168 return FilePosition.CurrentByteOffset.u.LowPart;
169}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define FILE_BEGIN
Definition: compat.h:761
#define INVALID_SET_FILE_POINTER
Definition: compat.h:732
#define MAXDWORD
#define FILE_END
Definition: winbase.h:117
#define FILE_CURRENT
Definition: winbase.h:116
#define ERROR_NEGATIVE_SEEK
Definition: winerror.h:325

◆ SetFilePointerEx()

BOOL WINAPI SetFilePointerEx ( HANDLE  hFile,
LARGE_INTEGER  liDistanceToMove,
PLARGE_INTEGER  lpNewFilePointer,
DWORD  dwMoveMethod 
)

Definition at line 177 of file fileinfo.c.

181{
184 FILE_POSITION_INFORMATION FilePosition;
185 FILE_STANDARD_INFORMATION FileStandard;
186
188 {
190 return FALSE;
191 }
192
193 switch (dwMoveMethod)
194 {
195 case FILE_CURRENT:
196 {
198 &FilePosition,
201 if (!NT_SUCCESS(Status))
202 {
204 return FALSE;
205 }
206
207 FilePosition.CurrentByteOffset.QuadPart += liDistanceToMove.QuadPart;
208 break;
209 }
210
211 case FILE_END:
212 {
214 &FileStandard,
217 if (!NT_SUCCESS(Status))
218 {
220 return FALSE;
221 }
222
223 FilePosition.CurrentByteOffset.QuadPart = FileStandard.EndOfFile.QuadPart +
224 liDistanceToMove.QuadPart;
225 break;
226 }
227
228 case FILE_BEGIN:
229 {
230 FilePosition.CurrentByteOffset.QuadPart = liDistanceToMove.QuadPart;
231 break;
232 }
233
234 default:
235 {
237 return FALSE;
238 }
239 }
240
241 if (FilePosition.CurrentByteOffset.QuadPart < 0)
242 {
244 return FALSE;
245 }
246
250 if (!NT_SUCCESS(Status))
251 {
253 return FALSE;
254 }
255
256 if (lpNewFilePointer != NULL)
257 {
258 *lpNewFilePointer = FilePosition.CurrentByteOffset;
259 }
260
261 return TRUE;
262}

Referenced by _chm_fetch_bytes(), BestFit_Write(), common_lseek_do_seek_nolock(), CryptSIPRetrieveSubjectGuid(), dump_memory64_info(), elf_map_file_read(), FileLockBytesImpl_ReadAt(), FileLockBytesImpl_SetSize(), FileLockBytesImpl_WriteAt(), filestream_SetSize(), MySetFilePointerEx(), ProtocolStream_Seek(), query_image_section(), stream_is_at_end_of_file_nolock(), textstream_get_AtEndOfStream(), textstream_Read(), and textstream_ReadAll().

◆ SetFileTime()

BOOL WINAPI SetFileTime ( IN HANDLE  hFile,
CONST FILETIME *lpCreationTime  OPTIONAL,
CONST FILETIME *lpLastAccessTime  OPTIONAL,
CONST FILETIME *lpLastWriteTime  OPTIONAL 
)

Definition at line 933 of file fileinfo.c.

937{
940 FILE_BASIC_INFORMATION FileBasic;
941
943 {
945 return FALSE;
946 }
947
948 memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION));
949
950 if (lpCreationTime)
951 {
952 FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime;
953 FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime;
954 }
955
956 if (lpLastAccessTime)
957 {
958 FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime;
959 FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime;
960 }
961
962 if (lpLastWriteTime)
963 {
964 FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime;
965 FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime;
966 }
967
970 &FileBasic,
973 if (!NT_SUCCESS(Status))
974 {
976 return FALSE;
977 }
978
979 return TRUE;
980}
#define memset(x, y, z)
Definition: compat.h:39

Referenced by cabinet_close_file_info(), common_futime(), copy(), DosInt21h(), CCabinet::ExtractFile(), CZipExtract::ExtractSingle(), fdi_notify_extract(), FNFDINOTIFY(), GetSetFileTimestamp(), LZCopy(), BtrfsContextMenu::reflink_copy(), reflink_copy2(), replace(), run_child_process(), and TouchFileTimes().

◆ SetFileValidData()

BOOL WINAPI SetFileValidData ( HANDLE  hFile,
LONGLONG  ValidDataLength 
)

Definition at line 1066 of file fileinfo.c.

1070{
1072 FILE_VALID_DATA_LENGTH_INFORMATION ValidDataLengthInformation;
1074
1075 ValidDataLengthInformation.ValidDataLength.QuadPart = ValidDataLength;
1076
1078 hFile,
1079 &IoStatusBlock, //out
1080 &ValidDataLengthInformation,
1083 );
1084
1085 if (!NT_SUCCESS(Status)){
1087 return FALSE;
1088 }
1089
1090 return TRUE;
1091}
@ FileValidDataLengthInformation
Definition: from_kernel.h:100