Blame winpr/libwinpr/nt/test/TestNtCreateFile.c

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
}