kernel32/tests: Some tests for invalid classes in SetFileInformationByHandle().
This commit is contained in:
parent
b95d318454
commit
5742497a35
|
@ -55,6 +55,7 @@ static NTSTATUS (WINAPI *pNtCreateFile)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES
|
||||||
PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
|
PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
|
||||||
static BOOL (WINAPI *pRtlDosPathNameToNtPathName_U)(LPCWSTR, PUNICODE_STRING, PWSTR*, CURDIR*);
|
static BOOL (WINAPI *pRtlDosPathNameToNtPathName_U)(LPCWSTR, PUNICODE_STRING, PWSTR*, CURDIR*);
|
||||||
static NTSTATUS (WINAPI *pRtlAnsiStringToUnicodeString)(PUNICODE_STRING, PCANSI_STRING, BOOLEAN);
|
static NTSTATUS (WINAPI *pRtlAnsiStringToUnicodeString)(PUNICODE_STRING, PCANSI_STRING, BOOLEAN);
|
||||||
|
static BOOL (WINAPI *pSetFileInformationByHandle)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, void*, DWORD);
|
||||||
|
|
||||||
static const char filename[] = "testfile.xxx";
|
static const char filename[] = "testfile.xxx";
|
||||||
static const char sillytext[] =
|
static const char sillytext[] =
|
||||||
|
@ -99,6 +100,7 @@ static void InitFunctionPointers(void)
|
||||||
pCreateFile2 = (void *) GetProcAddress(hkernel32, "CreateFile2");
|
pCreateFile2 = (void *) GetProcAddress(hkernel32, "CreateFile2");
|
||||||
pGetFinalPathNameByHandleA = (void *) GetProcAddress(hkernel32, "GetFinalPathNameByHandleA");
|
pGetFinalPathNameByHandleA = (void *) GetProcAddress(hkernel32, "GetFinalPathNameByHandleA");
|
||||||
pGetFinalPathNameByHandleW = (void *) GetProcAddress(hkernel32, "GetFinalPathNameByHandleW");
|
pGetFinalPathNameByHandleW = (void *) GetProcAddress(hkernel32, "GetFinalPathNameByHandleW");
|
||||||
|
pSetFileInformationByHandle = (void *) GetProcAddress(hkernel32, "SetFileInformationByHandle");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test__hread( void )
|
static void test__hread( void )
|
||||||
|
@ -4581,6 +4583,62 @@ static void test_GetFinalPathNameByHandleW(void)
|
||||||
CloseHandle(file);
|
CloseHandle(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_SetFileInformationByHandle(void)
|
||||||
|
{
|
||||||
|
FILE_ATTRIBUTE_TAG_INFO fileattrinfo = { 0 };
|
||||||
|
FILE_REMOTE_PROTOCOL_INFO protinfo = { 0 };
|
||||||
|
FILE_STANDARD_INFO stdinfo = { };
|
||||||
|
FILE_COMPRESSION_INFO compressinfo;
|
||||||
|
char tempFileName[MAX_PATH];
|
||||||
|
char tempPath[MAX_PATH];
|
||||||
|
HANDLE file;
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
if (!pSetFileInformationByHandle)
|
||||||
|
{
|
||||||
|
win_skip("SetFileInformationByHandle is not supported\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = GetTempPathA(sizeof(tempPath), tempPath);
|
||||||
|
ok(ret, "GetTempPathA failed, got error %u.\n", GetLastError());
|
||||||
|
|
||||||
|
/* ensure the existence of a file in the temp folder */
|
||||||
|
ret = GetTempFileNameA(tempPath, "abc", 0, tempFileName);
|
||||||
|
ok(ret, "GetTempFileNameA failed, got error %u.\n", GetLastError());
|
||||||
|
|
||||||
|
file = CreateFileA(tempFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||||
|
NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);
|
||||||
|
ok(file != INVALID_HANDLE_VALUE, "failed to open the temp file, error %u.\n", GetLastError());
|
||||||
|
|
||||||
|
/* invalid classes */
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pSetFileInformationByHandle(file, FileStandardInfo, &stdinfo, sizeof(stdinfo));
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError());
|
||||||
|
|
||||||
|
memset(&compressinfo, 0, sizeof(compressinfo));
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pSetFileInformationByHandle(file, FileCompressionInfo, &compressinfo, sizeof(compressinfo));
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError());
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pSetFileInformationByHandle(file, FileAttributeTagInfo, &fileattrinfo, sizeof(fileattrinfo));
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError());
|
||||||
|
|
||||||
|
memset(&protinfo, 0, sizeof(protinfo));
|
||||||
|
protinfo.StructureVersion = 1;
|
||||||
|
protinfo.StructureSize = sizeof(protinfo);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = pSetFileInformationByHandle(file, FileRemoteProtocolInfo, &protinfo, sizeof(protinfo));
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError());
|
||||||
|
|
||||||
|
CloseHandle(file);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(file)
|
START_TEST(file)
|
||||||
{
|
{
|
||||||
InitFunctionPointers();
|
InitFunctionPointers();
|
||||||
|
@ -4636,4 +4694,5 @@ START_TEST(file)
|
||||||
test_file_access();
|
test_file_access();
|
||||||
test_GetFinalPathNameByHandleA();
|
test_GetFinalPathNameByHandleA();
|
||||||
test_GetFinalPathNameByHandleW();
|
test_GetFinalPathNameByHandleW();
|
||||||
|
test_SetFileInformationByHandle();
|
||||||
}
|
}
|
||||||
|
|
|
@ -874,6 +874,37 @@ typedef struct _FILE_RENAME_INFO {
|
||||||
WCHAR FileName[1];
|
WCHAR FileName[1];
|
||||||
} FILE_RENAME_INFO, *PFILE_RENAME_INFO;
|
} FILE_RENAME_INFO, *PFILE_RENAME_INFO;
|
||||||
|
|
||||||
|
typedef struct _FILE_ATTRIBUTE_TAG_INFO {
|
||||||
|
DWORD FileAttributes;
|
||||||
|
DWORD ReparseTag;
|
||||||
|
} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO;
|
||||||
|
|
||||||
|
typedef struct _FILE_COMPRESSION_INFO {
|
||||||
|
LARGE_INTEGER CompressedFileSize;
|
||||||
|
WORD CompressionFormat;
|
||||||
|
UCHAR CompressionUnitShift;
|
||||||
|
UCHAR ChunkShift;
|
||||||
|
UCHAR ClusterShift;
|
||||||
|
UCHAR Reserved[3];
|
||||||
|
} FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO;
|
||||||
|
|
||||||
|
typedef struct _FILE_REMOTE_PROTOCOL_INFO {
|
||||||
|
USHORT StructureVersion;
|
||||||
|
USHORT StructureSize;
|
||||||
|
ULONG Protocol;
|
||||||
|
USHORT ProtocolMajorVersion;
|
||||||
|
USHORT ProtocolMinorVersion;
|
||||||
|
USHORT ProtocolRevision;
|
||||||
|
USHORT Reserved;
|
||||||
|
ULONG Flags;
|
||||||
|
struct {
|
||||||
|
ULONG Reserved[8];
|
||||||
|
} GenericReserved;
|
||||||
|
struct {
|
||||||
|
ULONG Reserved[16];
|
||||||
|
} ProtocolSpecificReserved;
|
||||||
|
} FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO;
|
||||||
|
|
||||||
#define PIPE_ACCESS_INBOUND 1
|
#define PIPE_ACCESS_INBOUND 1
|
||||||
#define PIPE_ACCESS_OUTBOUND 2
|
#define PIPE_ACCESS_OUTBOUND 2
|
||||||
#define PIPE_ACCESS_DUPLEX 3
|
#define PIPE_ACCESS_DUPLEX 3
|
||||||
|
|
Loading…
Reference in New Issue