Last active
December 24, 2020 04:52
-
-
Save 0xbadfca11/4ababeff1e3eaa2bb7dcb95b0a89b8ee to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define WIN32_LEAN_AND_MEAN | |
#define _ATL_NO_AUTOMATIC_NAMESPACE | |
#include <windows.h> | |
#include <atlbase.h> | |
#include <winternl.h> | |
#include <cstdio> | |
#include <cstdlib> | |
#pragma comment(lib, "ntdll") | |
#ifndef FILE_CS_FLAG_CASE_SENSITIVE_DIR | |
#define FILE_CS_FLAG_CASE_SENSITIVE_DIR 0x00000001 | |
#endif | |
#define FileCaseSensitiveInformation (FILE_INFORMATION_CLASS)71 | |
typedef struct { | |
ULONG Flags; | |
} FILE_CASE_SENSITIVE_INFORMATION, *PFILE_CASE_SENSITIVE_INFORMATION; | |
EXTERN_C NTSTATUS NTSYSAPI NTAPI NtSetInformationFile( | |
_In_ HANDLE FileHandle, | |
_Out_ PIO_STATUS_BLOCK IoStatusBlock, | |
_In_ PVOID FileInformation, | |
_In_ ULONG Length, | |
_In_ FILE_INFORMATION_CLASS FileInformationClass | |
); | |
int __cdecl wmain(int, PWSTR argv[]) | |
{ | |
ATL::CHandle d(CreateFileW(argv[1], FILE_WRITE_ATTRIBUTES, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_POSIX_SEMANTICS | FILE_FLAG_BACKUP_SEMANTICS, nullptr)); | |
if (d == INVALID_HANDLE_VALUE) | |
{ | |
printf("CreateFile %08lx\n", GetLastError()); | |
d.Detach(); | |
return EXIT_FAILURE; | |
} | |
IO_STATUS_BLOCK iob; | |
FILE_CASE_SENSITIVE_INFORMATION file_cs = { FILE_CS_FLAG_CASE_SENSITIVE_DIR }; | |
NTSTATUS status = NtSetInformationFile(d, &iob, &file_cs, sizeof file_cs, FileCaseSensitiveInformation); | |
if (NT_ERROR(status)) | |
{ | |
printf("NtSetInformationFile %08lx\n", status); | |
return EXIT_FAILURE; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define WIN32_LEAN_AND_MEAN | |
#define _ATL_NO_AUTOMATIC_NAMESPACE | |
#include <windows.h> | |
#include <atlbase.h> | |
#include <cstdio> | |
#include <cstdlib> | |
int __cdecl wmain(int, PWSTR argv[]) | |
{ | |
ATL::CHandle d(CreateFileW(argv[1], FILE_WRITE_ATTRIBUTES, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_POSIX_SEMANTICS | FILE_FLAG_BACKUP_SEMANTICS, nullptr)); | |
if (d == INVALID_HANDLE_VALUE) | |
{ | |
printf("CreateFile %08lx\n", GetLastError()); | |
d.Detach(); | |
return EXIT_FAILURE; | |
} | |
FILE_CASE_SENSITIVE_INFO file_cs = { FILE_CS_FLAG_CASE_SENSITIVE_DIR }; | |
if (!SetFileInformationByHandle(d, FileCaseSensitiveInfo, &file_cs, sizeof file_cs)) | |
{ | |
printf("SetFileInformationByHandle %08lx\n", GetLastError()); | |
return EXIT_FAILURE; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define WIN32_LEAN_AND_MEAN | |
#define _ATL_NO_AUTOMATIC_NAMESPACE | |
#include <windows.h> | |
#include <atlbase.h> | |
#include <winternl.h> | |
#include <cstdio> | |
#include <cstdlib> | |
#pragma comment(lib, "ntdll") | |
#ifndef FILE_CS_FLAG_CASE_SENSITIVE_DIR | |
#define FILE_CS_FLAG_CASE_SENSITIVE_DIR 0x00000001 | |
#endif | |
#define FileCaseSensitiveInformation (FILE_INFORMATION_CLASS)71 | |
typedef struct { | |
ULONG Flags; | |
} FILE_CASE_SENSITIVE_INFORMATION, *PFILE_CASE_SENSITIVE_INFORMATION; | |
EXTERN_C NTSTATUS NTSYSAPI NTAPI NtSetInformationFile( | |
_In_ HANDLE FileHandle, | |
_Out_ PIO_STATUS_BLOCK IoStatusBlock, | |
_In_ PVOID FileInformation, | |
_In_ ULONG Length, | |
_In_ FILE_INFORMATION_CLASS FileInformationClass | |
); | |
int __cdecl wmain(int, PWSTR argv[]) | |
{ | |
ATL::CHandle d(CreateFileW(argv[1], FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, nullptr)); | |
if (d == INVALID_HANDLE_VALUE) | |
{ | |
printf("CreateFile %08lx\n", GetLastError()); | |
d.Detach(); | |
return EXIT_FAILURE; | |
} | |
IO_STATUS_BLOCK iob; | |
FILE_CASE_SENSITIVE_INFORMATION file_cs = { FILE_CS_FLAG_CASE_SENSITIVE_DIR }; | |
NTSTATUS status = NtSetInformationFile(d, &iob, &file_cs, sizeof file_cs, FileCaseSensitiveInformation); | |
if (NT_ERROR(status)) | |
{ | |
printf("NtSetInformationFile %08lx\n", status); | |
return EXIT_FAILURE; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define WIN32_LEAN_AND_MEAN | |
#define _ATL_NO_AUTOMATIC_NAMESPACE | |
#include <windows.h> | |
#include <atlbase.h> | |
#include <cstdio> | |
#include <cstdlib> | |
int __cdecl wmain(int, PWSTR argv[]) | |
{ | |
ATL::CHandle d(CreateFileW(argv[1], FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, nullptr)); | |
if (d == INVALID_HANDLE_VALUE) | |
{ | |
printf("CreateFile %08lx\n", GetLastError()); | |
d.Detach(); | |
return EXIT_FAILURE; | |
} | |
FILE_CASE_SENSITIVE_INFO file_cs = { FILE_CS_FLAG_CASE_SENSITIVE_DIR }; | |
if (!SetFileInformationByHandle(d, FileCaseSensitiveInfo, &file_cs, sizeof file_cs)) | |
{ | |
printf("SetFileInformationByHandle %08lx\n", GetLastError()); | |
return EXIT_FAILURE; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment