It complies and links but ....
-
It is a code from MSDN. It complies and links but does not executes giving the following error File:i386\chkesp.c line:48 The value of ESP was not properly saved across a fuction call.This is usually a result of calling function decleared with one calling convention with a funciton pointer decleared with a different calling convention. #include windows.h,Setupapi.h> #include stdio.h DWORD Err; HDEVINFO DoDeviceEnum( GUID InterfaceClassGuid) /* Routine Description: Retrieves the device information set that contains that contains the devices of the specified class. the devices of the specified class. Parameters: InterfaceClassGuid - The interface class GUID. Return Value: If the function succeeds, the return value is a handle to the device information set. If the function fails, the return value is zero. */ { HDEVINFO DeviceInfoSet; HDEVINFO NewDeviceInfoSet; // Create a device information set that will be the container for // the device interfaces. DeviceInfoSet = SetupDiCreateDeviceInfoList(NULL, NULL); if(DeviceInfoSet == INVALID_HANDLE_VALUE) { Err = GetLastError(); printf( "SetupDiCreateDeviceInfoList failed: %lx.\n", Err ); return 0; } // Retrieve the device information set for the interface class. NewDeviceInfoSet = SetupDiGetClassDevsEx( &InterfaceClassGuid, // address of guid required NULL, // no enumerator NULL, // no parent window handle (might not be a good idea…) DIGCF_PRESENT | DIGCF_DEVICEINTERFACE, // flags //DeviceInfoSet, // do not pass this in, not in function prototype NULL, // NULL implies local machine NULL // Reserved’ must be null ); if(NewDeviceInfoSet == INVALID_HANDLE_VALUE) { Err = GetLastError(); printf( "SetupDiGetClassDevsEx failed: %lx.\n", Err ); return 0; } return NewDeviceInfoSet; } int main(int argc, TCHAR* argv[]) { GUID var; DoDeviceEnum(var); return 0; }