pastebin - collaborative debugging tool
nrubsig.kpaste.net RSS


renamefileex1.c - FileRenameInfoEx test
Posted by Anonymous on Thu 24th Jul 2025 12:29
raw | new post

  1. /*
  2.  * Compile with:
  3.  * $ gcc -std=gnu17 -Wall renamefileex1.c -lntdll -o renamefileex1.exe #
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <wchar.h>
  8. #include <windows.h>
  9. #include <winternl.h>
  10.  
  11. #define EXIT_USAGE 2
  12.  
  13.  
  14.  
  15. #define FILE_RENAME_REPLACE_IF_EXISTS                       0x00000001
  16. #define FILE_RENAME_POSIX_SEMANTICS                         0x00000002
  17. #define FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE          0x00000004
  18. #define FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE    0x00000008
  19. #define FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE             0x00000010
  20. #define FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE             0x00000020
  21. #define FILE_RENAME_PRESERVE_AVAILABLE_SPACE                0x00000030
  22. #define FILE_RENAME_IGNORE_READONLY_ATTRIBUTE               0x00000040
  23. #define FILE_RENAME_FORCE_RESIZE_TARGET_SR                  0x00000080
  24. #define FILE_RENAME_FORCE_RESIZE_SOURCE_SR                  0x00000100
  25. #define FILE_RENAME_FORCE_RESIZE_SR                         0x00000180
  26.  
  27.  
  28. int main(int argc, char *argv[]) {
  29.     int retval;
  30.  
  31.     if (argc != 3) {
  32.         (void)fprintf(stderr, "Usage: %s <srcfilename> <destfilename>\n",
  33.             argv[0]);
  34.         return EXIT_USAGE;
  35.     }
  36.  
  37.     const char *filename = argv[1];
  38.     HANDLE hFile = INVALID_HANDLE_VALUE;
  39.  
  40.     (void)printf("Attempting to delete file: %s\n", filename);
  41.  
  42.     hFile = CreateFileA(
  43.         filename,
  44.         DELETE,
  45.         FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
  46.         NULL,
  47.         OPEN_EXISTING,
  48.         FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_POSIX_SEMANTICS,
  49.         NULL
  50.     );
  51.  
  52.     if (hFile == INVALID_HANDLE_VALUE) {
  53.         (void)fprintf(stderr,
  54.             "Error: Could not open file '%s'. GetLastError: %ld\n",
  55.             filename, (long)GetLastError());
  56.         return 1;
  57.     }
  58.  
  59.     (void)printf("Successfully opened file handle.\n");
  60.  
  61.     struct {
  62.         FILE_RENAME_INFO fileRenameInfoEx;
  63.         wchar_t bufferspace[1024];
  64.     } riebuf;
  65.  
  66.     riebuf.fileRenameInfoEx.Flags =
  67.         FILE_RENAME_REPLACE_IF_EXISTS|FILE_RENAME_POSIX_SEMANTICS;
  68.     riebuf.fileRenameInfoEx.RootDirectory = NULL;
  69.     (void)swprintf(riebuf.fileRenameInfoEx.FileName, 1024, L"%s", argv[2]);
  70.     riebuf.fileRenameInfoEx.FileNameLength =
  71.         (DWORD)(wcslen(riebuf.fileRenameInfoEx.FileName) * sizeof(wchar_t));
  72.  
  73.     if (SetFileInformationByHandle(hFile,
  74.         FileRenameInfoEx,
  75.         &riebuf.fileRenameInfoEx,
  76.         sizeof(FILE_RENAME_INFO)+riebuf.fileRenameInfoEx.FileNameLength)) {
  77.         (void)printf("FileRenameInfoEx success\n");
  78.         retval = EXIT_SUCCESS;
  79.     }
  80.     else {
  81.         (void)printf("FileRenameInfoEx failed!? lasterr=%ld\n",
  82.             (long)GetLastError());
  83.         retval = EXIT_FAILURE;
  84.     }
  85.  
  86.     (void)CloseHandle(hFile);
  87.     return retval;
  88. }

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.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at