- /*
- * Compile with:
- * $ gcc -std=gnu17 -Wall renamefileex1.c -lntdll -o renamefileex1.exe #
- */
- #include <stdio.h>
- #include <wchar.h>
- #include <windows.h>
- #include <winternl.h>
- #define EXIT_USAGE 2
- #define FILE_RENAME_REPLACE_IF_EXISTS 0x00000001
- #define FILE_RENAME_POSIX_SEMANTICS 0x00000002
- #define FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE 0x00000004
- #define FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE 0x00000008
- #define FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE 0x00000010
- #define FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE 0x00000020
- #define FILE_RENAME_PRESERVE_AVAILABLE_SPACE 0x00000030
- #define FILE_RENAME_IGNORE_READONLY_ATTRIBUTE 0x00000040
- #define FILE_RENAME_FORCE_RESIZE_TARGET_SR 0x00000080
- #define FILE_RENAME_FORCE_RESIZE_SOURCE_SR 0x00000100
- #define FILE_RENAME_FORCE_RESIZE_SR 0x00000180
- int main(int argc, char *argv[]) {
- int retval;
- if (argc != 3) {
- (void)fprintf(stderr, "Usage: %s <srcfilename> <destfilename>\n",
- argv[0]);
- return EXIT_USAGE;
- }
- const char *filename = argv[1];
- HANDLE hFile = INVALID_HANDLE_VALUE;
- (void)printf("Attempting to delete file: %s\n", filename);
- hFile = CreateFileA(
- filename,
- DELETE,
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_POSIX_SEMANTICS,
- NULL
- );
- if (hFile == INVALID_HANDLE_VALUE) {
- (void)fprintf(stderr,
- "Error: Could not open file '%s'. GetLastError: %ld\n",
- filename, (long)GetLastError());
- return 1;
- }
- (void)printf("Successfully opened file handle.\n");
- struct {
- FILE_RENAME_INFO fileRenameInfoEx;
- wchar_t bufferspace[1024];
- } riebuf;
- riebuf.fileRenameInfoEx.Flags =
- FILE_RENAME_REPLACE_IF_EXISTS|FILE_RENAME_POSIX_SEMANTICS;
- riebuf.fileRenameInfoEx.RootDirectory = NULL;
- (void)swprintf(riebuf.fileRenameInfoEx.FileName, 1024, L"%s", argv[2]);
- riebuf.fileRenameInfoEx.FileNameLength =
- (DWORD)(wcslen(riebuf.fileRenameInfoEx.FileName) * sizeof(wchar_t));
- if (SetFileInformationByHandle(hFile,
- FileRenameInfoEx,
- &riebuf.fileRenameInfoEx,
- sizeof(FILE_RENAME_INFO)+riebuf.fileRenameInfoEx.FileNameLength)) {
- (void)printf("FileRenameInfoEx success\n");
- retval = EXIT_SUCCESS;
- }
- else {
- (void)printf("FileRenameInfoEx failed!? lasterr=%ld\n",
- (long)GetLastError());
- retval = EXIT_FAILURE;
- }
- (void)CloseHandle(hFile);
- return retval;
- }
renamefileex1.c - FileRenameInfoEx test
Posted by Anonymous on Thu 24th Jul 2025 12:29
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.