diff --git a/rostests/CMakeLists.txt b/rostests/CMakeLists.txt index b52b25d5f8c..649f2ac19c9 100644 --- a/rostests/CMakeLists.txt +++ b/rostests/CMakeLists.txt @@ -1,7 +1,7 @@ add_subdirectory(apitests) #add_subdirectory(dibtests) -#add_subdirectory(drivers) +add_subdirectory(drivers) #add_subdirectory(dxtest) add_subdirectory(kmtests) #add_subdirectory(regtests) diff --git a/rostests/drivers/CMakeLists.txt b/rostests/drivers/CMakeLists.txt new file mode 100644 index 00000000000..98adbfee0eb --- /dev/null +++ b/rostests/drivers/CMakeLists.txt @@ -0,0 +1,5 @@ + +#add_subdirectory(csqtest) +#add_subdirectory(memtest) +#add_subdirectory(ntoskrnl) +add_subdirectory(tcpip) \ No newline at end of file diff --git a/rostests/drivers/tcpip/CMakeLists.txt b/rostests/drivers/tcpip/CMakeLists.txt new file mode 100644 index 00000000000..06f14f093b5 --- /dev/null +++ b/rostests/drivers/tcpip/CMakeLists.txt @@ -0,0 +1,12 @@ + +include_directories(../../apitests/include) + +list(APPEND SOURCE + InterfaceInfo.c + testlist.c) + +add_executable(tcpip_drvtest ${SOURCE}) +target_link_libraries(tcpip_drvtest wine) +set_module_type(tcpip_drvtest win32cui) +add_importlibs(tcpip_drvtest msvcrt kernel32 ntdll) +add_cd_file(TARGET tcpip_drvtest DESTINATION reactos/bin FOR all) diff --git a/rostests/drivers/tcpip/InterfaceInfo.c b/rostests/drivers/tcpip/InterfaceInfo.c new file mode 100644 index 00000000000..872160a6897 --- /dev/null +++ b/rostests/drivers/tcpip/InterfaceInfo.c @@ -0,0 +1,107 @@ +/* + * PROJECT: ReactOS kernel-mode tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: User mode part of the TcpIp.sys test suite + * PROGRAMMER: Jérôme Gardou + */ + +#include + +#include +#include +#include +#include + +START_TEST(InterfaceInfo) +{ + IP_INTERFACE_INFO* pInterfaceInfo; + IP_INTERFACE_INFO InterfaceInfo; + HANDLE FileHandle; + DWORD BufferSize; + BOOL Result; + ULONG i; + + /* Open a control channel file for TCP */ + FileHandle = CreateFileW( + L"\\\\.\\Tcp", + FILE_READ_DATA | FILE_WRITE_DATA, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + ok(FileHandle != INVALID_HANDLE_VALUE, "CreateFile failed, GLE %lu\n", GetLastError()); + + /* Try the IOCTL */ + BufferSize = 0; + pInterfaceInfo = &InterfaceInfo; + Result = DeviceIoControl( + FileHandle, + IOCTL_IP_INTERFACE_INFO, + NULL, + 0, + pInterfaceInfo, + sizeof(InterfaceInfo), + &BufferSize, + NULL); + ok(!Result, "DeviceIoControl succeeded.\n"); + ok_long(GetLastError(), ERROR_INVALID_FUNCTION); + ok_long(BufferSize, 0); + + CloseHandle(FileHandle); + + /* This IOCTL only works with \Device\Ip */ + FileHandle = CreateFileW( + L"\\\\.\\Ip", + FILE_READ_DATA | FILE_WRITE_DATA, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + ok(FileHandle != INVALID_HANDLE_VALUE, "CreateFile failed, GLE %lu\n", GetLastError()); + + /* Get the buffer size. */ + BufferSize = 0; + pInterfaceInfo = &InterfaceInfo; + Result = DeviceIoControl( + FileHandle, + IOCTL_IP_INTERFACE_INFO, + NULL, + 0, + pInterfaceInfo, + sizeof(InterfaceInfo), + &BufferSize, + NULL); + ok(Result, "DeviceIoControl failed.\n"); + ok(BufferSize != 0, "Buffer size is zero.\n"); + trace("Buffer size is %lu.\n", BufferSize); + + if (BufferSize > sizeof(InterfaceInfo)) + { + pInterfaceInfo = HeapAlloc(GetProcessHeap(), 0, BufferSize); + ok(pInterfaceInfo != NULL, "HeapAlloc failed.\n"); + + /* Send IOCTL to fill the buffer in. */ + Result = DeviceIoControl( + FileHandle, + IOCTL_IP_INTERFACE_INFO, + NULL, + 0, + pInterfaceInfo, + BufferSize, + &BufferSize, + NULL); + ok(Result, "DeviceIoControl failed.\n"); + } + + /* Nothing much to test. Just print out the adapters we got */ + trace("We got %ld adapters.\n", pInterfaceInfo->NumAdapters); + for (i = 0; i < pInterfaceInfo->NumAdapters; i++) + { + trace("\tIndex %lu, name %S\n", pInterfaceInfo->Adapter[i].Index, pInterfaceInfo->Adapter[i].Name); + } + + HeapFree(GetProcessHeap(), 0, pInterfaceInfo); + CloseHandle(FileHandle); +} diff --git a/rostests/drivers/tcpip/testlist.c b/rostests/drivers/tcpip/testlist.c new file mode 100644 index 00000000000..93538638238 --- /dev/null +++ b/rostests/drivers/tcpip/testlist.c @@ -0,0 +1,14 @@ +#define __ROS_LONG64__ + +#define STANDALONE +#include + +extern void func_InterfaceInfo(void); + +const struct test winetest_testlist[] = +{ + { "InterfaceInfo", func_InterfaceInfo }, + + { 0, 0 } +}; +