diff --git a/reactos/dll/win32/setupapi/query.c b/reactos/dll/win32/setupapi/query.c index e09631e5abb..5df1157ee49 100644 --- a/reactos/dll/win32/setupapi/query.c +++ b/reactos/dll/win32/setupapi/query.c @@ -119,6 +119,7 @@ BOOL WINAPI SetupGetInfInformationW(LPCVOID InfSpec, DWORD SearchControl, { HINF inf; BOOL ret; + DWORD infSize; TRACE("(%p, %ld, %p, %ld, %p)\n", InfSpec, SearchControl, ReturnBuffer, ReturnBufferSize, RequiredSize); @@ -133,12 +134,6 @@ BOOL WINAPI SetupGetInfInformationW(LPCVOID InfSpec, DWORD SearchControl, return FALSE; } - if (!ReturnBuffer && ReturnBufferSize) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (SearchControl) { case INFINFO_INF_SPEC_IS_HINF: @@ -170,7 +165,13 @@ BOOL WINAPI SetupGetInfInformationW(LPCVOID InfSpec, DWORD SearchControl, return FALSE; } - ret = fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize); + ret = fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, &infSize); + if (!ReturnBuffer && (ReturnBufferSize >= infSize)) + { + SetLastError(ERROR_INVALID_PARAMETER); + ret = FALSE; + } + if (RequiredSize) *RequiredSize = infSize; if (SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE) SetupCloseInfFile(inf);