ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

symtest.c
Go to the documentation of this file.
00001 // ntest.cpp : Defines the entry point for the console application.
00002 //
00003 #include "stdafx.h"
00004 #include "windows.h"
00005 #include "ntndk.h"
00006 
00007 ULONG Runs;
00008 ULONG Failures;
00009 
00010 #define TEST_ASSERT( exp ) \
00011     ((!(exp)) ? \
00012     (printf("%s, %s, %d\n", #exp, __FILE__, __LINE__), Failures++, FALSE) : \
00013     TRUE), Runs++
00014 
00015 HANDLE
00016 SymlinkCreateTests(OUT PHANDLE OddLink)
00017 {
00018     NTSTATUS Status;
00019     HANDLE LinkHandle;
00020     UNICODE_STRING TargetName = RTL_CONSTANT_STRING(L"\\");
00021     UNICODE_STRING TargetName2 = RTL_CONSTANT_STRING(L"\\");
00022     UNICODE_STRING TargetName3 = RTL_CONSTANT_STRING(L"\\");
00023     UNICODE_STRING TargetName4 = RTL_CONSTANT_STRING(L"\\");
00024     UNICODE_STRING TargetName5 = RTL_CONSTANT_STRING(L"\\");
00025     UNICODE_STRING OkName = RTL_CONSTANT_STRING(L"\\OddLink");
00026     UNICODE_STRING OkName2 = RTL_CONSTANT_STRING(L"\\TestLink");
00027 
00028     //
00029     // Test1: Empty Attributes
00030     //
00031     {
00032     OBJECT_ATTRIBUTES Test1 = RTL_INIT_OBJECT_ATTRIBUTES(NULL, 0);
00033     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00034                                         SYMBOLIC_LINK_ALL_ACCESS,
00035                                         &Test1,
00036                                         &TargetName);
00037     TEST_ASSERT(NT_SUCCESS(Status));
00038     }
00039 
00040     //
00041     // Test2: No Attributes
00042     //
00043     {
00044     POBJECT_ATTRIBUTES Test2 = NULL;
00045     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00046                                         SYMBOLIC_LINK_ALL_ACCESS,
00047                                         Test2,
00048                                         &TargetName);
00049     TEST_ASSERT(NT_SUCCESS(Status));
00050     }
00051 
00052     //
00053     // Test3: Attributes with an empty name
00054     //
00055     {
00056     UNICODE_STRING TestName1 = {0, 0, NULL};
00057     OBJECT_ATTRIBUTES Test3 = RTL_INIT_OBJECT_ATTRIBUTES(&TestName1, 0);
00058     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00059                                         SYMBOLIC_LINK_ALL_ACCESS,
00060                                         &Test3,
00061                                         &TargetName);
00062     TEST_ASSERT(NT_SUCCESS(Status));
00063     }
00064 
00065     //
00066     // Test4: Attributes with an invalid name
00067     //
00068     {
00069     UNICODE_STRING TestName2 = {10, 12, UlongToPtr(0x81000000)};
00070     OBJECT_ATTRIBUTES Test4 = RTL_INIT_OBJECT_ATTRIBUTES(&TestName2, 0);
00071     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00072                                         SYMBOLIC_LINK_ALL_ACCESS,
00073                                         &Test4,
00074                                         &TargetName);
00075     TEST_ASSERT(Status == STATUS_ACCESS_VIOLATION);
00076     }
00077 
00078     //
00079     // Test5: Target with an odd name len
00080     //
00081     {
00082     UNICODE_STRING OddName = RTL_CONSTANT_STRING(L"\\TestLink");
00083     OBJECT_ATTRIBUTES Test5 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName, 0);
00084     TargetName3.Length--;
00085     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00086                                         SYMBOLIC_LINK_ALL_ACCESS,
00087                                         &Test5,
00088                                         &TargetName3);
00089     TEST_ASSERT(Status == STATUS_INVALID_PARAMETER);
00090     }
00091 
00092     //
00093     // Test6: Target with an emtpy name len
00094     //
00095     {
00096     OBJECT_ATTRIBUTES Test5 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName, 0);
00097     TargetName4.MaximumLength = 0;
00098     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00099                                         SYMBOLIC_LINK_ALL_ACCESS,
00100                                         &Test5,
00101                                         &TargetName4);
00102     TEST_ASSERT(Status == STATUS_INVALID_PARAMETER);
00103     }
00104 
00105     //
00106     // Test7: Target with an name len larger then maxlen
00107     //
00108     {
00109     OBJECT_ATTRIBUTES Test6 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName, 0);
00110     TargetName5.Length = TargetName5.MaximumLength + 2;
00111     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00112                                         SYMBOLIC_LINK_ALL_ACCESS,
00113                                         &Test6,
00114                                         &TargetName5);
00115     TEST_ASSERT(Status == STATUS_INVALID_PARAMETER);
00116     }
00117 
00118     //
00119     // Test5: Target with an odd name maxlen
00120     //
00121     {
00122     OBJECT_ATTRIBUTES Test5 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName, 0);
00123     TargetName2.MaximumLength--;
00124     TEST_ASSERT(TargetName2.MaximumLength % sizeof(WCHAR));
00125     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00126                                         SYMBOLIC_LINK_ALL_ACCESS,
00127                                         &Test5,
00128                                         &TargetName2);
00129     *OddLink = LinkHandle;
00130     TEST_ASSERT(NT_SUCCESS(Status));
00131     TEST_ASSERT(TargetName2.MaximumLength % sizeof(WCHAR));
00132     }
00133 
00134     //
00135     // Test6: collission
00136     //
00137     {
00138     OBJECT_ATTRIBUTES Test6 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName, 0);
00139     TargetName2.MaximumLength++;
00140     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00141                                         SYMBOLIC_LINK_ALL_ACCESS,
00142                                         &Test6,
00143                                         &TargetName2);
00144     TEST_ASSERT(Status == STATUS_OBJECT_NAME_COLLISION);
00145     }
00146 
00147     //
00148     // Test7: OK!
00149     //
00150     {
00151     OBJECT_ATTRIBUTES Test7 = RTL_INIT_OBJECT_ATTRIBUTES(&OkName2, 0);
00152     Status = NtCreateSymbolicLinkObject(&LinkHandle,
00153                                         SYMBOLIC_LINK_ALL_ACCESS,
00154                                         &Test7,
00155                                         &TargetName2);
00156     TEST_ASSERT(NT_SUCCESS(Status));
00157     }
00158 
00159     //
00160     // Return the last valid handle
00161     //
00162     return LinkHandle;
00163 };
00164 
00165 
00166 int _tmain(int argc, _TCHAR* argv[])
00167 {
00168     NTSTATUS Status;
00169     HANDLE LinkHandle, OddHandle;
00170     WCHAR TargetBuffer[MAX_PATH] = {0};
00171     WCHAR TargetBuffer2[MAX_PATH] = {0};
00172     UNICODE_STRING TargetName;
00173     UNICODE_STRING TargetName2;
00174     UNICODE_STRING OkName = RTL_CONSTANT_STRING(L"\\TestLink");
00175     ULONG NameSize;
00176 
00177     //
00178     // Start with the create tests
00179     //
00180     LinkHandle = SymlinkCreateTests(&OddHandle);
00181 
00182     //
00183     // Setup the two empty strings. One will have a magic-char at the end
00184     //
00185     RtlInitEmptyUnicodeString(&TargetName, TargetBuffer, sizeof(TargetBuffer));
00186     RtlInitEmptyUnicodeString(&TargetName2, TargetBuffer2, sizeof(TargetBuffer2));
00187 
00188     //
00189     // Now query the odd link
00190     //
00191     Status = NtQuerySymbolicLinkObject(OddHandle,
00192                                        &TargetName,
00193                                        &NameSize);
00194     TEST_ASSERT(NT_SUCCESS(Status));
00195     TEST_ASSERT(NameSize == sizeof(WCHAR));
00196     TEST_ASSERT(TargetName.Length == NameSize);
00197     TEST_ASSERT(TargetName.Buffer[0] == OBJ_NAME_PATH_SEPARATOR);
00198     NtClose(OddHandle);
00199 
00200     //
00201     // Now query the test link
00202     //
00203     Status = NtQuerySymbolicLinkObject(LinkHandle,
00204                                        &TargetName,
00205                                        &NameSize);
00206     TEST_ASSERT(NT_SUCCESS(Status));
00207     TEST_ASSERT(NameSize == 2 * sizeof(WCHAR));
00208     TEST_ASSERT(TargetName.Length == NameSize - sizeof(WCHAR));
00209     TEST_ASSERT(TargetName.Buffer[0] == OBJ_NAME_PATH_SEPARATOR);
00210 
00211     //
00212     // Corrupt the characters
00213     //
00214     TargetName.Buffer[(NameSize - 2) / sizeof(WCHAR)] = 'v';
00215     TargetName.Buffer[(NameSize - 3) / sizeof(WCHAR)] = 'v';
00216 
00217     //
00218     // Now query the test link
00219     //
00220     Status = NtQuerySymbolicLinkObject(LinkHandle,
00221                                        &TargetName,
00222                                        &NameSize);
00223     TEST_ASSERT(NT_SUCCESS(Status));
00224     TEST_ASSERT(TargetName.Buffer[0] == OBJ_NAME_PATH_SEPARATOR);
00225     TEST_ASSERT(TargetName.Buffer[1] == UNICODE_NULL);
00226 
00227     //
00228     // Corrupt the characters
00229     //
00230     TargetName.Buffer[(NameSize - 2) / sizeof(WCHAR)] = 'v';
00231     TargetName.Buffer[(NameSize - 3) / sizeof(WCHAR)] = 'v';
00232 
00233     //
00234     // Now query the test link
00235     //
00236     Status = NtQuerySymbolicLinkObject(LinkHandle,
00237                                        &TargetName,
00238                                        NULL);
00239     TEST_ASSERT(NT_SUCCESS(Status));
00240     TEST_ASSERT(TargetName.Buffer[0] == OBJ_NAME_PATH_SEPARATOR);
00241     TEST_ASSERT(TargetName.Buffer[1] == 'v');
00242 
00243     //
00244     // Print out results
00245     //
00246     {
00247     RTL_OSVERSIONINFOW VersionInfo;
00248     VersionInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
00249     RtlGetVersion(&VersionInfo);
00250     printf("Test complete on: %d\n", VersionInfo.dwBuildNumber);
00251     printf("Number of Failures: %d\n", Failures);
00252     printf("Number of Runs: %d\n", Runs);
00253     }
00254     return 0;
00255 }
00256 

Generated on Sun May 27 2012 04:37:41 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.