|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <winpr/crt.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#include <winpr/nt.h>
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#ifdef _WIN32
|
|
Packit |
1fb8d4 |
#define TESTFILE "\\??\\C:\\Documents and Settings\\All Users\\winpr_test_nt_create_file.txt"
|
|
Packit |
1fb8d4 |
#else
|
|
Packit |
1fb8d4 |
#define TESTFILE "/tmp/winpr_test_nt_create_file.txt"
|
|
Packit |
1fb8d4 |
#endif
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
int TestNtCreateFile(int argc, char* argv[])
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
HANDLE handle;
|
|
Packit |
1fb8d4 |
NTSTATUS ntstatus;
|
|
Packit |
1fb8d4 |
ULONG CreateOptions;
|
|
Packit |
1fb8d4 |
ANSI_STRING aString;
|
|
Packit |
1fb8d4 |
UNICODE_STRING uString;
|
|
Packit |
1fb8d4 |
ULONG CreateDisposition;
|
|
Packit |
1fb8d4 |
ACCESS_MASK DesiredAccess = 0;
|
|
Packit |
1fb8d4 |
OBJECT_ATTRIBUTES attributes;
|
|
Packit |
1fb8d4 |
IO_STATUS_BLOCK ioStatusBlock;
|
|
Packit |
1fb8d4 |
int result = -1;
|
|
Packit |
1fb8d4 |
_RtlInitAnsiString(&aString, TESTFILE);
|
|
Packit |
1fb8d4 |
ntstatus = _RtlAnsiStringToUnicodeString(&uString, &aString, TRUE);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (ntstatus != STATUS_SUCCESS)
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
printf("_RtlAnsiStringToUnicodeString failure: 0x%08" PRIX32 "\n", ntstatus);
|
|
Packit |
1fb8d4 |
goto out;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
handle = NULL;
|
|
Packit |
1fb8d4 |
ZeroMemory(&ioStatusBlock, sizeof(IO_STATUS_BLOCK));
|
|
Packit |
1fb8d4 |
_InitializeObjectAttributes(&attributes, &uString, 0, NULL, NULL);
|
|
Packit |
1fb8d4 |
DesiredAccess = GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE;
|
|
Packit |
1fb8d4 |
CreateOptions = FILE_DIRECTORY_FILE | FILE_WRITE_THROUGH;
|
|
Packit |
1fb8d4 |
CreateDisposition = FILE_OVERWRITE_IF;
|
|
Packit Service |
5a9772 |
ntstatus = _NtCreateFile(&handle, DesiredAccess, &attributes, &ioStatusBlock, 0, 0,
|
|
Packit Service |
5a9772 |
CreateDisposition, CreateOptions, 0, 0, 0);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (ntstatus != STATUS_SUCCESS)
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
printf("_NtCreateFile failure: 0x%08" PRIX32 "\n", ntstatus);
|
|
Packit |
1fb8d4 |
goto out;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
ntstatus = _NtClose(handle);
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (ntstatus != STATUS_SUCCESS)
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
printf("_NtClose failure: 0x%08" PRIX32 "\n", ntstatus);
|
|
Packit |
1fb8d4 |
goto out;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
result = 0;
|
|
Packit |
1fb8d4 |
out:
|
|
Packit |
1fb8d4 |
_RtlFreeUnicodeString(&uString);
|
|
Packit |
1fb8d4 |
#ifndef _WIN32
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
if (result == 0)
|
|
Packit |
1fb8d4 |
{
|
|
Packit |
1fb8d4 |
printf("%s: Error, this test is currently expected not to succeed on this platform.\n",
|
|
Packit |
1fb8d4 |
__FUNCTION__);
|
|
Packit |
1fb8d4 |
result = -1;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
else
|
|
Packit |
1fb8d4 |
{
|
|
Packit Service |
5a9772 |
printf("%s: This test is currently expected to fail on this platform.\n", __FUNCTION__);
|
|
Packit |
1fb8d4 |
result = 0;
|
|
Packit |
1fb8d4 |
}
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
#endif
|
|
Packit |
1fb8d4 |
return result;
|
|
Packit |
1fb8d4 |
}
|