@@ -112,19 +112,33 @@ ListTests(
112112 IN BOOLEAN IncludeHidden )
113113{
114114 DWORD Error = ERROR_SUCCESS ;
115- CHAR Buffer [1024 ];
116- DWORD BytesRead ;
117- PCSTR TestName = Buffer ;
115+ PSTR Buffer = NULL ;
116+ DWORD BufferSize = 1024 ;
117+ DWORD BytesRead = BufferSize ;
118+ PCSTR TestName ;
118119 PCKMT_TEST TestEntry = TestList ;
119120 PCSTR NextTestName ;
120121
121122 puts ("Valid test names:" );
122123
123124 // get test list from driver
124- if (!DeviceIoControl (KmtestHandle , IOCTL_KMTEST_GET_TESTS , NULL , 0 , Buffer , sizeof Buffer , & BytesRead , NULL ))
125- error_goto (Error , cleanup );
125+ while (TRUE)
126+ {
127+ Buffer = HeapAlloc (GetProcessHeap (), 0 , BufferSize );
128+ if (!Buffer )
129+ error_goto (Error , cleanup );
130+
131+ if (!DeviceIoControl (KmtestHandle , IOCTL_KMTEST_GET_TESTS , NULL , 0 , Buffer , BufferSize , & BytesRead , NULL ))
132+ error_goto (Error , cleanup );
133+ if (BytesRead < BufferSize )
134+ break ;
135+
136+ HeapFree (GetProcessHeap (), 0 , Buffer );
137+ BufferSize *= 2 ;
138+ }
126139
127140 // output test list plus user-mode tests
141+ TestName = Buffer ;
128142 while (TestEntry -> TestName || * TestName )
129143 {
130144 if (!TestEntry -> TestName )
@@ -167,6 +181,9 @@ ListTests(
167181 }
168182
169183cleanup :
184+ if (Buffer )
185+ HeapFree (GetProcessHeap (), 0 , Buffer );
186+
170187 return Error ;
171188}
172189
0 commit comments