Skip to content

Instantly share code, notes, and snippets.

@0xbadfca11
Last active December 24, 2020 04:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0xbadfca11/4ababeff1e3eaa2bb7dcb95b0a89b8ee to your computer and use it in GitHub Desktop.
Save 0xbadfca11/4ababeff1e3eaa2bb7dcb95b0a89b8ee to your computer and use it in GitHub Desktop.
#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;
}
}
#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;
}
}
#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;
}
}
#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