[NTDLL_APITEST]

- Use GetProcAddress for RtlGetFullPathName_UstrEx to allow running the test on WinXP

svn path=/trunk/; revision=57393
This commit is contained in:
Thomas Faber 2012-09-26 18:15:44 +00:00
parent 6b568374dd
commit f0d72063a8

View file

@ -6,6 +6,7 @@
*/ */
#define WIN32_NO_STATUS #define WIN32_NO_STATUS
#define UNICODE
#include <wine/test.h> #include <wine/test.h>
#include <pseh/pseh2.h> #include <pseh/pseh2.h>
#include <ndk/rtlfuncs.h> #include <ndk/rtlfuncs.h>
@ -25,6 +26,19 @@ RtlGetFullPathName_UstrEx(
); );
*/ */
NTSTATUS
(NTAPI
*pRtlGetFullPathName_UstrEx)(
IN PUNICODE_STRING FileName,
IN PUNICODE_STRING StaticString,
IN PUNICODE_STRING DynamicString,
IN PUNICODE_STRING *StringUsed,
IN PSIZE_T FilePartSize OPTIONAL,
OUT PBOOLEAN NameInvalid,
OUT RTL_PATH_TYPE* PathType,
OUT PSIZE_T LengthNeeded OPTIONAL
);
#define StartSeh() ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY { #define StartSeh() ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY {
#define EndSeh(ExpectedStatus) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok(ExceptionStatus == ExpectedStatus, "Exception %lx, expected %lx\n", ExceptionStatus, ExpectedStatus) #define EndSeh(ExpectedStatus) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok(ExceptionStatus == ExpectedStatus, "Exception %lx, expected %lx\n", ExceptionStatus, ExpectedStatus)
@ -212,7 +226,7 @@ RunTestCases(VOID)
NameInvalid = (BOOLEAN)-1; NameInvalid = (BOOLEAN)-1;
LengthNeeded = 1234; LengthNeeded = 1234;
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, Status = pRtlGetFullPathName_UstrEx(&FileName,
&FullPathName, &FullPathName,
NULL, NULL,
&StringUsed, &StringUsed,
@ -287,28 +301,35 @@ START_TEST(RtlGetFullPathName_UstrEx)
SIZE_T LengthNeeded; SIZE_T LengthNeeded;
BOOLEAN Okay; BOOLEAN Okay;
pRtlGetFullPathName_UstrEx = (PVOID)GetProcAddress(GetModuleHandle(L"ntdll"), "RtlGetFullPathName_UstrEx");
if (!pRtlGetFullPathName_UstrEx)
{
skip("RtlGetFullPathName_UstrEx unavailable\n");
return;
}
/* NULL parameters */ /* NULL parameters */
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); pRtlGetFullPathName_UstrEx(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
RtlInitUnicodeString(&FileName, NULL); RtlInitUnicodeString(&FileName, NULL);
TempString = FileName; TempString = FileName;
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL); pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
RtlInitUnicodeString(&FileName, L""); RtlInitUnicodeString(&FileName, L"");
TempString = FileName; TempString = FileName;
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL); pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(NULL, NULL, NULL, NULL, NULL, NULL, &PathType, NULL); pRtlGetFullPathName_UstrEx(NULL, NULL, NULL, NULL, NULL, NULL, &PathType, NULL);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
ok(PathType == RtlPathTypeUnknown || ok(PathType == RtlPathTypeUnknown ||
broken(PathType == RtlPathTypeNotSet) /* Win7 */, "PathType = %d\n", PathType); broken(PathType == RtlPathTypeNotSet) /* Win7 */, "PathType = %d\n", PathType);
@ -320,7 +341,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
NameInvalid = (BOOLEAN)-1; NameInvalid = (BOOLEAN)-1;
LengthNeeded = 1234; LengthNeeded = 1234;
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(NULL, NULL, NULL, &StringUsed, &FilePartSize, &NameInvalid, &PathType, &LengthNeeded); pRtlGetFullPathName_UstrEx(NULL, NULL, NULL, &StringUsed, &FilePartSize, &NameInvalid, &PathType, &LengthNeeded);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
ok(StringUsed == NULL, "StringUsed = %p\n", StringUsed); ok(StringUsed == NULL, "StringUsed = %p\n", StringUsed);
ok(FilePartSize == 0, "FilePartSize = %lu\n", (ULONG)FilePartSize); ok(FilePartSize == 0, "FilePartSize = %lu\n", (ULONG)FilePartSize);
@ -336,7 +357,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
NameInvalid = (BOOLEAN)-1; NameInvalid = (BOOLEAN)-1;
LengthNeeded = 1234; LengthNeeded = 1234;
StartSeh() StartSeh()
RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, &StringUsed, &FilePartSize, &NameInvalid, NULL, &LengthNeeded); pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, &StringUsed, &FilePartSize, &NameInvalid, NULL, &LengthNeeded);
EndSeh(STATUS_ACCESS_VIOLATION); EndSeh(STATUS_ACCESS_VIOLATION);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
ok(StringUsed == NULL, "StringUsed = %p\n", StringUsed); ok(StringUsed == NULL, "StringUsed = %p\n", StringUsed);
@ -350,7 +371,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
TempString = FileName; TempString = FileName;
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL); Status = pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL);
ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status); ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status);
EndSeh(STATUS_SUCCESS); EndSeh(STATUS_SUCCESS);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
@ -360,7 +381,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
TempString = FileName; TempString = FileName;
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL); Status = pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL);
ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status); ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status);
EndSeh(STATUS_SUCCESS); EndSeh(STATUS_SUCCESS);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
@ -372,7 +393,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
RtlFillMemory(NameInvalidArray, sizeof(NameInvalidArray), 0x55); RtlFillMemory(NameInvalidArray, sizeof(NameInvalidArray), 0x55);
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NameInvalidArray, &PathType, NULL); Status = pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NameInvalidArray, &PathType, NULL);
ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status); ok(Status == STATUS_OBJECT_NAME_INVALID, "status = %lx\n", Status);
EndSeh(STATUS_SUCCESS); EndSeh(STATUS_SUCCESS);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
@ -386,7 +407,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
TempString = FileName; TempString = FileName;
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL); Status = pRtlGetFullPathName_UstrEx(&FileName, NULL, NULL, NULL, NULL, NULL, &PathType, NULL);
ok(Status == STATUS_BUFFER_TOO_SMALL, "status = %lx\n", Status); ok(Status == STATUS_BUFFER_TOO_SMALL, "status = %lx\n", Status);
EndSeh(STATUS_SUCCESS); EndSeh(STATUS_SUCCESS);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);
@ -398,7 +419,7 @@ START_TEST(RtlGetFullPathName_UstrEx)
RtlInitUnicodeString(&StaticString, NULL); RtlInitUnicodeString(&StaticString, NULL);
PathType = RtlPathTypeNotSet; PathType = RtlPathTypeNotSet;
StartSeh() StartSeh()
Status = RtlGetFullPathName_UstrEx(&FileName, &StaticString, NULL, NULL, NULL, NULL, &PathType, NULL); Status = pRtlGetFullPathName_UstrEx(&FileName, &StaticString, NULL, NULL, NULL, NULL, &PathType, NULL);
ok(Status == STATUS_BUFFER_TOO_SMALL, "status = %lx\n", Status); ok(Status == STATUS_BUFFER_TOO_SMALL, "status = %lx\n", Status);
EndSeh(STATUS_SUCCESS); EndSeh(STATUS_SUCCESS);
ok_eq_ustr(&FileName, &TempString); ok_eq_ustr(&FileName, &TempString);