ReactOS 0.4.16-dev-2298-gcac013a
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:25
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:75
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(), local_server_thread(), 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::@2461 u
_In_ LPCSTR lpFileName
Definition: winbase.h:2824
#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_autocreation(), 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 678 of file fileinfo.c.

681{
682 FILE_BASIC_INFORMATION FileBasic;
685
687
689 {
691 return FALSE;
692 }
693
696 &FileBasic,
697 sizeof(FileBasic),
699 if (NT_SUCCESS(Status))
700 {
701 *dwFileAttributes = FileBasic.FileAttributes;
702 return TRUE;
703 }
704
706 return FALSE;
707}
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:106
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:75
NTSTATUS NTAPI NtQueryFullAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation)
Definition: file.c:3991
#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 if (!NT_SUCCESS(Status))
657 {
658 /* It failed? Is it a DOS device? */
660 {
662 }
663
664 /* Set the error otherwise */
667 }
668
669 /* Return the file attributes */
670 return FileInformation.FileAttributes;
671}
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:3979
#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(), 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(), find_runtimes(), 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(), pendingRename(), 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
#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
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by __is_regular_file(), BtrfsPropSheet::apply_changes_file(), BtrfsPropSheet::check_file(), common_stat_handle_file_opened(), count_blocks(), ShellDirectory::fill_w32fdata_shell(), FTP_SendData(), get_open_info(), DriveVolume::GetClusterInfo(), IStream_fnStat(), MountDisk(), ShellDirectory::read_directory(), WinDirectory::read_directory(), 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(), _tiffSizeProc(), 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(), PROFILE_Load(), pSetupOpenAndMapFileForRead(), query_image_section(), read_text_archive(), ReadJobShadowFile(), ReadRdpFile(), ReadText(), RECORD_StreamFromFile(), RecycleBin5::RemoveFromDatabase(), RetrieveQuote(), SearchFile(), CHttpClient::SendFile(), sha_check(), StgOpenStorage(), test_FileMapping(), test_http_cache(), test_overwrite(), test_ReadConsole(), 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 880 of file fileinfo.c.

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

Referenced by AddKnownDriverToList(), copy(), RecycleBin5::DeleteFile(), DoReadAllOfFile(), 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:282
#define FILE_TYPE_CHAR
Definition: winbase.h:284
#define FILE_TYPE_PIPE
Definition: winbase.h:285
#define FILE_TYPE_DISK
Definition: winbase.h:283

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 988 of file fileinfo.c.

989{
991 FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
993 FILE_POSITION_INFORMATION FilePosInfo;
995
997 {
999 return FALSE;
1000 }
1001
1002 //get current position
1004 hFile,
1006 &FilePosInfo,
1009 );
1010
1011 if (!NT_SUCCESS(Status)){
1013 return FALSE;
1014 }
1015
1016 EndOfFileInfo.EndOfFile.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1017
1018 /*
1019 NOTE:
1020 This call is not supposed to free up any space after the eof marker
1021 if the file gets truncated. We have to deallocate the space explicitly afterwards.
1022 But...most file systems dispatch both FileEndOfFileInformation
1023 and FileAllocationInformation as they were the same command.
1024
1025 */
1027 hFile,
1028 &IoStatusBlock, //out
1029 &EndOfFileInfo,
1032 );
1033
1034 if (!NT_SUCCESS(Status)){
1036 return FALSE;
1037 }
1038
1039 FileAllocationInfo.AllocationSize.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1040
1041
1043 hFile,
1044 &IoStatusBlock, //out
1048 );
1049
1050 if (!NT_SUCCESS(Status)){
1052 return FALSE;
1053 }
1054
1055 return TRUE;
1056
1057}
@ 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(), gen_forward_chain_testdll(), ImageRemoveCertificate(), IStream_fnSetSize(), 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_ResolveDelayLoadedAPI(), Test_Truncate(), test_write_watch(), BtrfsSend::Thread(), VfdCreateImageFile(), and VfdSaveImage().

◆ SetFileAttributesA()

BOOL WINAPI SetFileAttributesA ( LPCSTR  lpFileName,
DWORD  dwFileAttributes 
)

Definition at line 760 of file fileinfo.c.

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

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 714 of file fileinfo.c.

717{
718 FILE_BASIC_INFORMATION FileBasic;
721
723
725 {
727 return FALSE;
728 }
729
732 &FileBasic,
733 sizeof(FileBasic),
735 if (NT_SUCCESS(Status))
736 {
738
741 &FileBasic,
742 sizeof(FileBasic),
744 }
745
746 if (!NT_SUCCESS(Status))
747 {
749 return FALSE;
750 }
751
752 return TRUE;
753}

◆ SetFileAttributesW()

BOOL WINAPI SetFileAttributesW ( LPCWSTR  lpFileName,
DWORD  dwFileAttributes 
)

Definition at line 778 of file fileinfo.c.

780{
782 PWSTR PathUBuffer;
784 UNICODE_STRING NtPathU;
786 RTL_RELATIVE_NAME_U RelativeName;
789
790 /* Get relative name */
791 if (!RtlDosPathNameToRelativeNtPathName_U(lpFileName, &NtPathU, NULL, &RelativeName))
792 {
794 return FALSE;
795 }
796
797 /* Save buffer to allow later freeing */
798 PathUBuffer = NtPathU.Buffer;
799
800 /* If we have relative name (and root dir), use them instead */
801 if (RelativeName.RelativeName.Length != 0)
802 {
803 NtPathU.Length = RelativeName.RelativeName.Length;
804 NtPathU.MaximumLength = RelativeName.RelativeName.MaximumLength;
805 NtPathU.Buffer = RelativeName.RelativeName.Buffer;
806 }
807 else
808 {
809 RelativeName.ContainingDirectory = NULL;
810 }
811
812 /* Prepare the object attribute for opening the file */
815 RelativeName.ContainingDirectory, NULL);
816
817 /* Attempt to open the file, while supporting reparse point */
822 /* If opening failed, check whether it was because of reparse point support */
823 if (!NT_SUCCESS(Status))
824 {
825 /* Nope, just quit */
827 {
828 RtlReleaseRelativeName(&RelativeName);
829 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
831
832 return FALSE;
833 }
834
835 /* Yes, retry without */
840 if (!NT_SUCCESS(Status))
841 {
842 RtlReleaseRelativeName(&RelativeName);
843 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
845
846 return FALSE;
847 }
848 }
849
850 /* We don't need strings anylonger */
851 RtlReleaseRelativeName(&RelativeName);
852 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
853
854 /* Zero our structure, we'll only set file attributes */
856 /* Set the attributes, filtering only allowed attributes, and forcing normal attribute */
858
859 /* Finally, set the attributes */
862 /* Close the file */
864
865 /* If it failed, set the error and fail */
866 if (!NT_SUCCESS(Status))
867 {
869
870 return FALSE;
871 }
872
873 return TRUE;
874}
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
_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:3953
#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:3402
UNICODE_STRING RelativeName
Definition: rtltypes.h:1374
HANDLE ContainingDirectory
Definition: rtltypes.h:1375
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(), 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:116
#define FILE_CURRENT
Definition: winbase.h:115
#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(), 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 932 of file fileinfo.c.

936{
939 FILE_BASIC_INFORMATION FileBasic;
940
942 {
944 return FALSE;
945 }
946
947 memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION));
948
949 if (lpCreationTime)
950 {
951 FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime;
952 FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime;
953 }
954
955 if (lpLastAccessTime)
956 {
957 FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime;
958 FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime;
959 }
960
961 if (lpLastWriteTime)
962 {
963 FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime;
964 FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime;
965 }
966
969 &FileBasic,
972 if (!NT_SUCCESS(Status))
973 {
975 return FALSE;
976 }
977
978 return TRUE;
979}
#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 1065 of file fileinfo.c.

1069{
1071 FILE_VALID_DATA_LENGTH_INFORMATION ValidDataLengthInformation;
1073
1074 ValidDataLengthInformation.ValidDataLength.QuadPart = ValidDataLength;
1075
1077 hFile,
1078 &IoStatusBlock, //out
1079 &ValidDataLengthInformation,
1082 );
1083
1084 if (!NT_SUCCESS(Status)){
1086 return FALSE;
1087 }
1088
1089 return TRUE;
1090}
@ FileValidDataLengthInformation
Definition: from_kernel.h:100