Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3111 lines
99 KiB

/**------------------------------------------------------------------
regress.c
------------------------------------------------------------------**/
//
// Includes
//
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <wtypes.h>
#include <cfgmgr32.h>
#include <malloc.h>
#include <regstr.h>
#include "cmtest.h"
//
// Private Prototypes
//
VOID
RegressionTest_Range(
HWND hDlg
);
VOID
RegressionTest_Class(
HWND hDlg
);
VOID
RegressionTest_Traverse(
HWND hDlg
);
VOID
RegressionTest_HardwareProfile(
HWND hDlg
);
VOID
RegressionTest_DeviceList(
HWND hDlg
);
VOID
RegressionTest_LogConf(
HWND hDlg
);
VOID
RegressionTest_CreateDevNode(
HWND hDlg
);
VOID
RegressionTest_Properties(
HWND hDlg
);
VOID
RegressionTest_DeviceClass(
HWND hDlg
);
BOOL
DisplayRange(
IN HWND hDlg,
IN RANGE_LIST rlh
);
BOOL
TraverseAndCheckParents (
DEVNODE dnParent
);
//
// Globals
//
TCHAR szPresentDeviceID[] = TEXT("Test\\Present\\0000");
TCHAR szNonExistantDeviceID[] = TEXT("Test\\XXX\\0000");
TCHAR szInvalidDeviceID[] = TEXT("Test\\0000");
TCHAR szNotFoundDeviceID[] = TEXT("Test\\NotFound\\0000");
TCHAR szMovedDeviceID[] = TEXT("Test\\Moved\\0000");
TCHAR szNoBaseDeviceID[] = TEXT("Test\\NoBaseDevice\\0000");
TCHAR szMissingParentDeviceID[] = TEXT("Test\\ParentMissing\\0000");
TCHAR szNotFoundParentDeviceID[] = TEXT("Test\\ParentNotFound\\0000");
TCHAR szMovedParentDeviceID[] = TEXT("Test\\ParentMoved\\0000");
TCHAR szNoAttachedDeviceID[] = TEXT("Test\\NoAttachedComponents\\0000");
TCHAR szMissingChildDeviceID[] = TEXT("Test\\ChildMissing\\0000");
TCHAR szNotFoundChildDeviceID[] = TEXT("Test\\ChildNotFound\\0000");
TCHAR szMovedChildDeviceID[] = TEXT("Test\\ChildMoved\\0000");
TCHAR szValid2ndChildDeviceID[] = TEXT("Test\\Valid2ndChild\\0000");
TCHAR szMissingSiblingDeviceID[] = TEXT("Test\\SiblingMissing\\0000");
TCHAR szNotFoundSiblingDeviceID[] = TEXT("Test\\SiblingNotFound\\0000");
TCHAR szMovedSiblingDeviceID[] = TEXT("Test\\SiblingMoved\\0000");
TCHAR szValid3rdChildDeviceID[] = TEXT("Test\\Valid3rdChild\\0000");
TCHAR szEnabledDeviceID[] = TEXT("Test\\Enabled\\0000");
TCHAR szDisabledDeviceID[] = TEXT("Test\\Disabled\\0000");
TCHAR szCreateDeviceID[] = TEXT("Test\\Create\\0000");
TCHAR szDoNotCreateDeviceID[] = TEXT("Test\\DoNotCreate\\0000");
TCHAR szPhantomDeviceID[] = TEXT("Test\\Phantom\\0000");
TCHAR szRemoveDeviceID[] = TEXT("Test\\Remove\\0000");
TCHAR szClassGuid_0[] = TEXT("{00000000-0000-0000-0000-000000000000}");
TCHAR szClassGuid_None[] = TEXT("{99999999-9999-9999-9999-999999999999}");
TCHAR szDev_MovedTo[] = TEXT("TEST\\MovedTo\\0000");
TCHAR szDev_MovedFrom[] = TEXT("TEXT\\MovedFrom\\0000");
extern HMACHINE hMachine;
/**----------------------------------------------------------------------**/
INT_PTR CALLBACK
RegressionDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
CONFIGRET Status = CR_SUCCESS;
TCHAR szDeviceID[MAX_DEVICE_ID_LEN];
TCHAR szParentID[MAX_DEVICE_ID_LEN];
DEVNODE dnDevNode, dnParentDevNode;
ULONG ulFlags;
switch (message) {
case WM_INITDIALOG:
SetDlgItemText(hDlg, ID_ST_PARENT, (LPCTSTR)lParam);
CheckDlgButton(hDlg, ID_RD_NORMAL, 1);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDOK:
EndDialog(hDlg, TRUE);
return TRUE;
case ID_BT_CLEAR:
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_RESETCONTENT, 0, 0);
break;
case ID_BT_START:
if (IsDlgButtonChecked(hDlg, ID_CHK_RANGE)) {
RegressionTest_Range(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_CLASS)) {
RegressionTest_Class(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_TRAVERSE)) {
RegressionTest_Traverse(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_HWPROF)) {
RegressionTest_HardwareProfile(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_DEVLIST)) {
RegressionTest_DeviceList(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_LOGCONF)) {
RegressionTest_LogConf(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_CREATE)) {
RegressionTest_CreateDevNode(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_PROPERTIES)) {
RegressionTest_Properties(hDlg);
}
if (IsDlgButtonChecked(hDlg, ID_CHK_DEVCLASS)) {
RegressionTest_DeviceClass(hDlg);
}
}
break;
}
return FALSE;
} // RegressionDlgProc
//-----------------------------------------------------------------------------
VOID
RegressionTest_Range(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
RANGE_LIST rlh1, rlh2, rlh3;
RANGE_ELEMENT rElement;
DWORDLONG ullStart, ullEnd;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
lstrcpy(szMsg, TEXT("1. Create Range List: "));
Status = CM_Create_Range_List(&rlh1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//------------------------------------------------------
// Add range test
//------------------------------------------------------
lstrcpy(szMsg, TEXT("2. Add Ranges: "));
Status = CM_Add_Range(12, 15, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(12,15) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
Status = CM_Add_Range(7, 9, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(7,9) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
Status = CM_Add_Range(21, 25, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(21,25) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// A1
Status = CM_Add_Range(4, 5, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(4,5) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// A2
Status = CM_Add_Range(11, 13, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(11,13) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// A3
Status = CM_Add_Range(20, 26, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(20,26) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// B1
Status = CM_Add_Range(6, 8, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(6,8) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// B2
Status = CM_Add_Range(14, 16, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(14,16) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// special cases
Status = CM_Add_Range(10, 14, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("(10,14) Failed (%xh)"), Status);
goto DoneAddingRanges;
}
DisplayRange(hDlg, rlh1);
// add "join" cases
DoneAddingRanges:
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
// conflict cases
Status = CM_Add_Range(2, 4, rlh1, CM_ADD_RANGE_DONOTADDIFCONFLICT);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("(2,4) Should've Failed due to conflict"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Add_Range(20, 22, rlh1, CM_ADD_RANGE_DONOTADDIFCONFLICT);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("(20,22) Should've Failed due to conflict"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Add_Range(10, 12, rlh1, CM_ADD_RANGE_DONOTADDIFCONFLICT);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("(10,12) Should've Failed due to conflict"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Add_Range(26, 28, rlh1, CM_ADD_RANGE_DONOTADDIFCONFLICT);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("(26,28) Should've Failed due to conflict"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Add_Range(18, 30, rlh1, CM_ADD_RANGE_DONOTADDIFCONFLICT);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("(18,30) Should've Failed due to conflict"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
//------------------------------------------------------
// Duplicate range list test
//------------------------------------------------------
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("_____Duplicate Range List Test__________"));
Status = CM_Create_Range_List(&rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("CM_Create_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg1);
return;
}
// new range is empty
Status = CM_Dup_Range_List(rlh1, rlh2, 0);
if (Status != CR_SUCCESS) {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Dup failed to empty range list"));
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Original Range:"));
DisplayRange(hDlg, rlh1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Duplicated Range:"));
DisplayRange(hDlg, rlh2);
// new range is not empty
Status = CM_Dup_Range_List(rlh1, rlh2, 0);
if (Status != CR_SUCCESS) {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Dup failed to non-empty range list"));
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Original Range:"));
DisplayRange(hDlg, rlh1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Duplicated Range:"));
DisplayRange(hDlg, rlh2);
//------------------------------------------------------
// Delete range list test
//------------------------------------------------------
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("_____Delete Range Test__________"));
Status = CM_Delete_Range(1,3, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (1,3)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(17,19, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (17,19)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(27,30, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (27,30)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(3,6, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (3,6)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(13,16, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (13,16)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(8,10, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (8,10)"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(9,21, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (9,21)"));
DisplayRange(hDlg, rlh2);
// special cases
Status = CM_Delete_Range(0,DWORD_MAX, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (0,DWORD_MAX)"));
DisplayRange(hDlg, rlh2);
// re-dup range list 2 again, it's currently empty
CM_Dup_Range_List(rlh1, rlh2, 0);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Resetting range list to:"));
DisplayRange(hDlg, rlh2);
Status = CM_Delete_Range(0,DWORDLONG_MAX, rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Delete_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Deleting (0,DWORDLONG_MAX)"));
DisplayRange(hDlg, rlh2);
//------------------------------------------------------
// Test range available
//------------------------------------------------------
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("______Test Range Available____________"));
DisplayRange(hDlg, rlh1);
Status = CM_Test_Range_Available(0, 2, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (0,2) is available (expected)"));
} else {
wsprintf(szMsg, TEXT("Range (0,2) not available (%d)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(17, 19, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (17,19) is available (expected)"));
} else {
wsprintf(szMsg, TEXT("Range (17,19) not available (%d)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(30, 40, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (30,40) is available (expected)"));
} else {
wsprintf(szMsg, TEXT("Range (30,40) not available (%d)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(3, 4, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (3,4) is available"));
} else {
wsprintf(szMsg, TEXT("Range (3,4) not available, %d (expected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(26, 50, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (26,50) is available"));
} else {
wsprintf(szMsg, TEXT("Range (26,50) not available, %d (expected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(16, 20, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (16,20) is available"));
} else {
wsprintf(szMsg, TEXT("Range (16,20) not available, %d (epxected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(3, 21, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (3,21) is available"));
} else {
wsprintf(szMsg, TEXT("Range (3,21) not available, %d (expected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(5, 24, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (5,24) is available"));
} else {
wsprintf(szMsg, TEXT("Range (5,24) not available, %d (expected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Test_Range_Available(24, 25, rlh1, 0);
if (Status == CR_SUCCESS) {
lstrcpy(szMsg, TEXT("Range (24,25) is available"));
} else {
wsprintf(szMsg, TEXT("Range (24,25) not available, %d (expected)"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//------------------------------------------------------
// Invert Range test
//------------------------------------------------------
Status = CM_Create_Range_List(&rlh3, 0);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Original range to invert:"));
DisplayRange(hDlg, rlh1);
Status = CM_Invert_Range_List(rlh1, rlh2, 100, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Invert_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Inverting into empty range:"));
DisplayRange(hDlg, rlh2);
Status = CM_Invert_Range_List(rlh1, rlh2, 25, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Invert_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Inverting into non-empty range, MAX=25:"));
DisplayRange(hDlg, rlh2);
Status = CM_Invert_Range_List(rlh1, rlh2, 50, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Invert_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Inverting into non-empty range, MAX=50:"));
DisplayRange(hDlg, rlh2);
Status = CM_Invert_Range_List(rlh3, rlh2, 1000, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Invert_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Inverting from empty range, MAX = 1000:"));
DisplayRange(hDlg, rlh2);
//------------------------------------------------------
// Free range list test
//------------------------------------------------------
Status = CM_Free_Range_List(rlh1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Free_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Free_Range_List(rlh2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Free_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Free_Range_List(rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Free_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Status = CM_Free_Range_List(rlh3, 0);
if (Status != CR_INVALID_RANGE_LIST) {
lstrcpy(szMsg, TEXT("Error: freeing already free list should have failed"));
} else {
lstrcpy(szMsg, TEXT("Freeing a freed list caused expected error"));
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0, (LPARAM)(LPTSTR)szMsg);
//------------------------------------------------------
// Intersection test
//------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
CM_Add_Range(1, 3, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(13, 18, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(25, 27, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(30, 36, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(42, 45, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(48, 52, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
DisplayRange(hDlg, rlh1);
CM_Create_Range_List(&rlh2, 0);
CM_Add_Range(8, 9, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(12, 14, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(17, 19, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(32, 34, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(40, 50, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
DisplayRange(hDlg, rlh2);
CM_Create_Range_List(&rlh3, 0);
Status = CM_Intersect_Range_List(rlh1, rlh2, rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Intersect_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Expected intersection: (13,14)(17,18)(32,34)(42,45)(48,50):"));
DisplayRange(hDlg, rlh3);
//------------------------------------------------------
// Merge (union) test
//------------------------------------------------------
// use same rlh1 and rlh2 from the intersection test, non-emptry rlh3
Status = CM_Merge_Range_List(rlh1, rlh2, rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Merge_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Expected union: (1,3)(8,9)(12,19)(25,27)(30,36)(40,52)"));
DisplayRange(hDlg, rlh3);
// both ranges empty
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh2, 0);
CM_Create_Range_List(&rlh1, 0);
CM_Create_Range_List(&rlh2, 0);
Status = CM_Merge_Range_List(rlh1, rlh2, rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Merge_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Expected union: none"));
DisplayRange(hDlg, rlh3);
// first range empty
CM_Add_Range(8, 9, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(12, 14, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(17, 19, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(32, 34, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(40, 50, rlh2, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Merge_Range_List(rlh1, rlh2, rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Merge_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Expected union: (8,9)(12,14)(17,19)(32,34)(40,50)"));
DisplayRange(hDlg, rlh3);
// second range empty
CM_Free_Range_List(rlh2, 0);
CM_Create_Range_List(&rlh2, 0);
CM_Add_Range(1, 3, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(13, 18, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(25, 27, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(30, 36, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(42, 45, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(48, 52, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Merge_Range_List(rlh1, rlh2, rlh3, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Merge_Range_List Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Expected union: (1,3)(13,18)(25,27)(30,36)(42,45)(48,52)"));
DisplayRange(hDlg, rlh3);
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh2, 0);
CM_Free_Range_List(rlh3, 0);
//------------------------------------------------------
// Find Range test
//------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
// should be a hit on the first try
CM_Add_Range(10, 20, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Find_Range(&ullStart, 256, 512, 0xFFFFFFFFFFFFFFF0, 1024, rlh1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Test_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
wsprintf(szMsg, TEXT("Found Range at %d (expecting 256)"), (DWORD)ullStart);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
// should find it but after skipping one range
CM_Add_Range(300, 320, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Find_Range(&ullStart, 256, 512, 0xFFFFFFFFFFFFFFF0, 1024, rlh1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_Test_Range Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
wsprintf(szMsg, TEXT("Found Range at %d (expecting 336)"), (DWORD)ullStart);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
// should fail the find
CM_Add_Range(500, 600, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Find_Range(&ullStart, 256, 512, 0xFFFFFFFFFFFFFFF0, 1024, rlh1, 0);
if (Status != CR_FAILURE) {
wsprintf(szMsg, TEXT("CM_Test_Range should have Failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test range failed as expected"));
CM_Free_Range_List(rlh1, 0);
//---------------------------------------------------------------------
// Special Test 1 - error condition found by LeslieF
//---------------------------------------------------------------------
CM_Create_Range_List(&rlh1, 0); // Create range list.
CM_Add_Range(0, 50, rlh1, CM_ADD_RANGE_ADDIFCONFLICT); // Add range [0-50].
CM_Delete_Range(0, 9, rlh1, 0); // Delete the range [0-9].
CM_Delete_Range(21, 29, rlh1, 0); // Delete the range [21-29].
CM_Delete_Range(41, 50, rlh1, 0); // Delete the range [41-50].
// There should be two ranges left [10-20] and [30-40].
CM_First_Range(rlh1, &ullStart, &ullEnd, &rElement, 0);
CM_Next_Range(&rElement, &ullStart, &ullEnd, 0);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 1, expected (10,20),(30,40)"));
DisplayRange(hDlg, rlh1);
CM_Free_Range_List(rlh1, 0);
//---------------------------------------------------------------------
// Special Test 2 - error condition found by LeslieF
//---------------------------------------------------------------------
Status = CM_Dup_Range_List(0, 0,0);
if (Status == CR_INVALID_RANGE_LIST) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 2 - passed"));
} else {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 2 - failed"));
}
//---------------------------------------------------------------------
// Special Test 3 - error condition found by LeslieF
//---------------------------------------------------------------------
Status = CM_Find_Range(NULL, 0, 0, 0, 0, 0, 0);
if (Status == CR_INVALID_RANGE_LIST) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 3 - passed"));
} else {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 3 - failed"));
}
//---------------------------------------------------------------------
// Special Test 4 - error condition found by LeslieF
//---------------------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh1, 0);
//---------------------------------------------------------------------
// Special Test 5 - error condition found by LeslieF
//---------------------------------------------------------------------
CM_Intersect_Range_List(0, 0, 0, 0);
CM_Invert_Range_List(0, 0, 0, 0);
CM_Merge_Range_List(0, 0, 0, 0);
//---------------------------------------------------------------------
// Special Test 6 - error condition found by LeslieF
//---------------------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
CM_Create_Range_List(&rlh2, 0);
// Add range [10-20].
CM_Add_Range(10, 20, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
// Add range [30-40].
CM_Add_Range(30, 40, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
// Duplicate range list.
CM_Dup_Range_List(rlh1, rlh2, 0);
// There should be two ranges in rlh2, [10-20] and [30-40].
// Get the first.
CM_First_Range(rlh2, &ullStart, &ullEnd, &rElement, 0);
// Get the next.
CM_Next_Range(&rElement, &ullStart, &ullEnd, 0); // *** Returns CR_FAILURE *** Should return CR_SUCCESS
// Free the range lists.
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh2, 0);
// Example2:
CM_Create_Range_List(&rlh1, 0);
CM_Create_Range_List(&rlh2, 0);
// Add range [10-20][30-40].
CM_Add_Range(10, 20, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(30, 40, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
// Invert range list.
CM_Invert_Range_List(rlh1, rlh2, 40, 0);
// There should be two ranges [0-9] and [21-29].
// Get the first.
CM_First_Range(rlh2, &ullStart, &ullEnd, &rElement, 0);
// Get the next.
CM_Next_Range(&rElement, &ullStart, &ullEnd, 0); // *** Returns CR_FAILURE *** Should return CR_SUCCESS
// Free the range lists.
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh2, 0);
//---------------------------------------------------------------------
// Special Test 7 - error condition found by LeslieF
//---------------------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
CM_Add_Range(10, 20, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_Add_Range(30, 40, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
Status = CM_Test_Range_Available(9, 21, rlh1, 0);
if (Status != CR_FAILURE) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 7 - failed"));
}
CM_Free_Range_List(rlh1, 0);
//---------------------------------------------------------------------
// Special Test 8 - error condition found by Bogdan
//---------------------------------------------------------------------
CM_Create_Range_List(&rlh1, 0);
CM_Create_Range_List(&rlh2, 0);
CM_Add_Range(0, 10, rlh1, CM_ADD_RANGE_ADDIFCONFLICT);
CM_First_Range(rlh1, &ullStart, &ullEnd, &rElement, 0);
if (ullStart != 0 || ullEnd != 10) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Special Test 8 - failure 1"));
}
// As expected, ullStart = 0 and ullEnd = 10
CM_Invert_Range_List(rlh1, rlh2, 20, 0);
CM_First_Range(rlh2, &ullStart, &ullEnd, &rElement, 0);
// Expected ullStart = 11, ullEnd = 20, but ullStart = 0 and ullEnd = 0xFFFFFFFFFFFFFFFFF
// The next range is correct one [11, 20]
//CM_Next_Range(&rElement, &ullStart, &ullEnd, 0);
CM_Free_Range_List(rlh1, 0);
CM_Free_Range_List(rlh2, 0);
CM_Free_Range_List(rlh2, 0); // test deleting already deleted range list
return;
} // RegressionTest_Range
//-----------------------------------------------------------------------------
VOID
RegressionTest_Class(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
GUID ClassGuid;
UUID ClassUuid;
TCHAR szClass[MAX_CLASS_NAME_LEN];
DEVNODE dnDevNode;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
ULONG ulStatus=0, ulProblem=0, ulLength = 0, ulSize = 0, i = 0;
PTSTR pBuffer = NULL;
HKEY hKey = NULL, hKey1 = NULL;
#if 0
i = 0;
while (Status == CR_SUCCESS) {
Status = CM_Enumerate_Classes_Ex(i, &ClassGuid, 0, hMachine);
if (Status == CR_SUCCESS) {
ulLength = MAX_CLASS_NAME_LEN;
Status = CM_Get_Class_Name(&ClassGuid, szClass, &ulLength, 0);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Class %d, Name: %s"), i, szClass);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
}
i++;
}
return;
Status = CM_Locate_DevNode(&dnDevNode, NULL, 0);
if (Status != CR_SUCCESS) {
MessageBox(hDlg, TEXT("Locate Root failed"), TEXT("Test"), MB_OK);
return;
}
Status = CM_Reenumerate_DevNode(dnDevNode, 0);
if (Status != CR_SUCCESS) {
MessageBox(hDlg, TEXT("Reenumeration of Root Failed"), TEXT("Test"), MB_OK);
}
Status = CM_Locate_DevNode(&dnDevNode, TEXT("Test\\A1\\0000"), 0);
if (Status != CR_SUCCESS) {
return;
}
lstrcpy(szMsg, TEXT("1. Reenumerate Test\\A1\\0000: "));
Status = CM_Reenumerate_DevNode(dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Locate_DevNode(&dnDevNode, TEXT("Test\\A2\\0001"), 0);
if (Status != CR_SUCCESS) {
return;
}
lstrcpy(szMsg, TEXT("2. QueryRemove SubTree Test\\A2\\0001: "));
Status = CM_Query_Remove_SubTree(dnDevNode, CM_QUERY_REMOVE_UI_OK);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("3. Remove SubTree Test\\A2\\0001: "));
Status = CM_Remove_SubTree(dnDevNode, CM_REMOVE_UI_OK);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
#endif
lstrcpy(szMsg, TEXT("Test Delete Class Key only, no other keys exist"));
UuidFromString(TEXT("00000000-0000-0000-0000-000000000000"), &ClassGuid);
Status = CM_Open_Class_Key(&ClassGuid, TEXT("Madeup class"), KEY_ALL_ACCESS,
RegDisposition_OpenAlways, &hKey, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("CM_Open_Class_Key Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("CM_Open_Class_Key Passed"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg1);
RegCloseKey(hKey);
Status = CM_Delete_Class_Key(&ClassGuid, CM_DELETE_CLASS_ONLY);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed"));
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Test Delete Class Key only, subkeys exist"));
UuidFromString(TEXT("00000000-0000-0000-0000-000000000001"), &ClassGuid);
Status = CM_Delete_Class_Key(&ClassGuid, CM_DELETE_CLASS_ONLY);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed"));
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Test Delete Class Key, subkeys too"));
UuidFromString(TEXT("00000000-0000-0000-0000-000000000002"), &ClassGuid);
Status = CM_Open_Class_Key(&ClassGuid, NULL, KEY_ALL_ACCESS,
RegDisposition_OpenAlways, &hKey, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("CM_Open_Class_Key Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("CM_Open_Class_Key Passed"));
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg1);
RegCreateKeyEx(hKey, TEXT("Subkey1"), 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hKey1, NULL);
MessageBox(NULL, TEXT("Does 0000...0002\\SubKey1 exist?"), TEXT("Test"), MB_OK);
RegCloseKey(hKey);
RegCloseKey(hKey1);
Status = CM_Delete_Class_Key(&ClassGuid, CM_DELETE_CLASS_SUBKEYS);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed"));
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Status = CM_Locate_DevNode(&dnDevNode, TEXT("Root\\Device001\\0000"), 0);
if (Status != CR_SUCCESS) {
return;
}
lstrcpy(szMsg, TEXT("4. Get Status for Test\\A2\\0001: "));
Status = CM_Get_DevNode_Status(&ulStatus, &ulProblem, dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed, Status=%xh, Problem=%xh"), ulStatus, ulProblem);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
} // RegressionTest_Class
//-----------------------------------------------------------------------------
VOID
RegressionTest_Traverse(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
DEVNODE dnDevNode, dnRootDevNode, dnChildDevNode, dnParentDevNode;
TCHAR Buffer[512];
ULONG ulDepth;
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)TEXT("____TRAVERSE REGRESSION TEST_____"));
/*
lstrcpy(szMsg, TEXT("1. Get parent of invalid devnode: "));
Status = CM_Get_Parent(&dnDevNode, 1, 0);
if (Status != CR_INVALID_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("2. Get parent of root: "));
CM_Locate_DevNode(&dnRootDevNode, NULL, 0);
Status = CM_Get_Parent(&dnDevNode, dnRootDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("3. Get parent with no BaseDevicePath value: "));
CM_Locate_DevNode(&dnDevNode, szNoBaseDeviceID, 0);
Status = CM_Get_Parent(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("4. Get parent that doesn't exist in registry: "));
CM_Locate_DevNode(&dnDevNode, szMissingParentDeviceID, 0);
Status = CM_Get_Parent(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("5. Get parent that isn't marked as found: "));
CM_Locate_DevNode(&dnDevNode, szNotFoundParentDeviceID, 0);
Status = CM_Get_Parent(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
wsprintf(szMsg, TEXT("6. Get parent that has been moved: "));
CM_Locate_DevNode(&dnDevNode, szMovedParentDeviceID, 0);
Status = CM_Get_Parent(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("7. Get valid parent: "));
Status = CM_Locate_DevNode(&dnDevNode, szPresentDeviceID, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed Locate (%xh)"), Status);
}
else {
Status = CM_Get_Parent(&dnParentDevNode, dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (DevNode=%xh)"), dnDevNode);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("8. Get child of invalid devnode: "));
Status = CM_Get_Child(&dnDevNode, 1, 0);
if (Status != CR_INVALID_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("9. Get child with no AttachedComponents: "));
CM_Locate_DevNode(&dnDevNode, szNoAttachedDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("10. Get child that doesn't exist in registry: "));
CM_Locate_DevNode(&dnDevNode, szMissingChildDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("11. Get child that isn't marked as found: "));
CM_Locate_DevNode(&dnDevNode, szNotFoundChildDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("12. Get child that has been moved: "));
CM_Locate_DevNode(&dnDevNode, szMovedChildDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("13. First child isn't valid: "));
CM_Locate_DevNode(&dnDevNode, szValid2ndChildDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("14. Get valid child: "));
Status = CM_Get_Child(&dnChildDevNode, dnParentDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("15. Get sibling of invalid devnode: "));
Status = CM_Get_Sibling(&dnDevNode, 1, 0);
if (Status != CR_INVALID_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("16. Get sibling of Root: "));
Status = CM_Get_Sibling(&dnDevNode, dnRootDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("17. Get sibling with no AttachedComponents: "));
CM_Locate_DevNode(&dnDevNode, szNoAttachedDeviceID, 0);
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("18. Get sibling that doesn't exist in registry: "));
CM_Locate_DevNode(&dnDevNode, szMissingSiblingDeviceID, 0);
CM_Get_Child(&dnDevNode, dnDevNode, 0);
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("19. Get sibling that isn't marked as found: "));
CM_Locate_DevNode(&dnDevNode, szNotFoundSiblingDeviceID, 0);
CM_Get_Child(&dnDevNode, dnDevNode, 0);
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("20. Get sibling that has been moved: "));
CM_Locate_DevNode(&dnDevNode, szMovedSiblingDeviceID, 0);
CM_Get_Child(&dnDevNode, dnDevNode, 0);
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status != CR_NO_SUCH_DEVNODE) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
wsprintf(szMsg, TEXT("21. First sibling isn't valid: "));
CM_Locate_DevNode(&dnDevNode, szValid3rdChildDeviceID, 0);
Status = CM_Get_Child(&dnDevNode, dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Get Child Failed (%xh)"), Status);
} else {
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
*/
wsprintf(szMsg, TEXT("Finding all children of %s:"), szPresentDeviceID);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
CM_Locate_DevNode(&dnDevNode, szPresentDeviceID, 0);
CM_Get_Child(&dnDevNode, dnDevNode, 0);
CM_Get_Device_ID(dnDevNode, Buffer, MAX_PATH, 0);
wsprintf(szMsg, TEXT(" Child DeviceID = %s (DevNode = %d)"),
Buffer, dnDevNode);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
while (Status == CR_SUCCESS) {
Status = CM_Get_Sibling(&dnDevNode, dnDevNode, 0);
if (Status == CR_SUCCESS) {
CM_Get_Device_ID(dnDevNode, Buffer, MAX_PATH, 0);
wsprintf(szMsg, TEXT(" Sibling DeviceID = %s (DevNode = %d)"),
Buffer, dnDevNode);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
}
if (Status != CR_NO_SUCH_DEVINST) {
wsprintf(szMsg, TEXT("CM_Get_Sibling failed (%xh)"), Status);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
//----------------------------------------------------------------
// Do recursive traversal test
//----------------------------------------------------------------
// Create a new node.
Status = CM_Locate_DevNode_Ex(&dnRootDevNode, NULL, 0, hMachine);
if (Status == CR_SUCCESS) {
if (TraverseAndCheckParents(dnRootDevNode)) {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Recursive Traversal Test: PASSED"));
} else {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Recursive Traversal Test: FAILED"));
}
} else {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Locate Root DevNode: FAILED"));
}
//----------------------------------------------------------------
// Get Depth Test
//----------------------------------------------------------------
lstrcpy(szMsg, TEXT("Get Depth of Root: "));
CM_Locate_DevNode_Ex(&dnDevNode, NULL, 0, hMachine);
Status = CM_Get_Depth_Ex(&ulDepth, dnDevNode, 0, hMachine);
if (Status != CR_SUCCESS || ulDepth != 0) {
wsprintf(szMsg1, TEXT("Failed, Depth = %d (%xh)"), ulDepth, Status);
}
else wsprintf(szMsg1, TEXT("Passed, Depth = %d (%xh)"), ulDepth, Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Depth of 1st Level Node: "));
CM_Locate_DevNode_Ex(&dnDevNode, TEXT("Root\\Device001\\0000"), 0, hMachine);
Status = CM_Get_Depth_Ex(&ulDepth, dnDevNode, 0, hMachine);
if (Status != CR_SUCCESS || ulDepth != 1) {
wsprintf(szMsg1, TEXT("Failed, Depth = %d (%xh)"), ulDepth, Status);
}
else wsprintf(szMsg1, TEXT("Passed, Depth = %d (%xh)"), ulDepth, Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Depth of 2nd Level Node: "));
CM_Locate_DevNode_Ex(&dnDevNode, TEXT("Root\\Device002\\0000"), 0, hMachine);
Status = CM_Get_Depth_Ex(&ulDepth, dnDevNode, 0, hMachine);
if (Status != CR_SUCCESS || ulDepth != 2) {
wsprintf(szMsg1, TEXT("Failed, Depth = %d (%xh)"), ulDepth, Status);
}
else wsprintf(szMsg1, TEXT("Passed, Depth = %d (%xh)"), ulDepth, Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return;
} // RegressionTest_Traverse
//-----------------------------------------------------------------------------
VOID
RegressionTest_HardwareProfile(
HWND hDlg
)
{
CONFIGRET Status;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
DEVNODE dnDevNode;
TCHAR Buffer[512];
HWPROFILEINFO HWProfileInfo;
ULONG ulValue = 0, Index =0;
ULONG C0 = CSCONFIGFLAG_DO_NOT_CREATE;
ULONG C1 = CSCONFIGFLAG_DO_NOT_START;
ULONG C2 = CSCONFIGFLAG_DISABLED;
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)TEXT("____HARDWARE PROFILES REGRESSION TEST_____"));
/*
lstrcpy(szMsg, TEXT("Get HwProf Flags for Missing Device ID: "));
Status = CM_Get_HW_Prof_Flags(szNonExistantDeviceID, 0, &ulValue, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, ulValue);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Hw Profile for invalid config: "));
Status = CM_Get_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 13, &ulValue, 0);
if (Status != CR_REGISTRY_ERROR) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, ulValue);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//---------------------------------------------------------------
// Profile 1
//---------------------------------------------------------------
lstrcpy(szMsg, TEXT("Set HwProf Flags for config 1: "));
Status = CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 1, C1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, C1);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, C1);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Hw Profile for config 1: "));
ulValue = 0;
Status = CM_Get_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 1, &ulValue, 0);
if (Status != CR_SUCCESS || C1 != ulValue) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, ulValue);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, ulValue);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//---------------------------------------------------------------
// Profile 2
//---------------------------------------------------------------
lstrcpy(szMsg, TEXT("Set HwProf Flags for config 2: "));
Status = CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 2, C2, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, C2);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, C2);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Hw Profile for config 2: "));
ulValue = 0;
Status = CM_Get_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 2, &ulValue, 0);
if (Status != CR_SUCCESS || C2 != ulValue) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, ulValue);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, ulValue);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//---------------------------------------------------------------
// Current Profile
//---------------------------------------------------------------
lstrcpy(szMsg, TEXT("Set HwProf Flags for current config: "));
Status = CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 0, C0, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, C0);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, C0);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Get Hw Profile for current config: "));
ulValue = 0;
Status = CM_Get_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 0, &ulValue, 0);
if (Status != CR_SUCCESS || C0 != ulValue) {
wsprintf(szMsg1, TEXT("Failed (%xh), Flags = %xh"), Status, ulValue);
}
else wsprintf(szMsg1, TEXT("Passed (%xh), Flags = %xh"), Status, ulValue);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
*/
//---------------------------------------------------------------
// Test CM_Get_HW_Prof_Info
//---------------------------------------------------------------
lstrcpy(szMsg, TEXT("Get HwProf Info test:"));
Status = CM_Get_Hardware_Profile_Info_Ex(0xFFFFFFFF, &HWProfileInfo, 0, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
wsprintf(szMsg, TEXT(" Current (%u) HW Profile: %s, Flags=%xh"),
HWProfileInfo.HWPI_ulHWProfile,
HWProfileInfo.HWPI_szFriendlyName,
HWProfileInfo.HWPI_dwFlags);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
Index = 0;
Status = CR_SUCCESS;
while (Status == CR_SUCCESS) {
Status = CM_Get_Hardware_Profile_Info(Index, &HWProfileInfo, 0);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT(" HW Profile %u: %s, Flags=%xh"),
HWProfileInfo.HWPI_ulHWProfile,
HWProfileInfo.HWPI_szFriendlyName,
HWProfileInfo.HWPI_dwFlags);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
Index++;
}
// reset to pre-test conditions
CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 0, 0, 0);
CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 1, 0, 0);
CM_Set_HW_Prof_Flags(TEXT("Root\\Device001\\0000"), 2, 0, 0);
return;
} // RegressionTest_HardwareProfile
//-----------------------------------------------------------------------------
VOID
RegressionTest_DeviceList(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
PTSTR pBuffer = NULL, p = NULL;
ULONG ulSize = 0;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
TCHAR pDeviceID[MAX_PATH];
GUID InterfaceGuid;
TCHAR szAlias[MAX_PATH];
lstrcpy(szMsg, TEXT("Test Device ID List Size:"));
Status = CM_Get_Device_ID_List_Size_Ex(&ulSize, NULL,
CM_GETIDLIST_FILTER_NONE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Test Device ID List:"));
pBuffer = malloc(ulSize * sizeof(TCHAR));
Status = CM_Get_Device_ID_List_Ex(NULL, pBuffer, ulSize,
CM_GETIDLIST_FILTER_NONE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Device ID List (small buffer):"));
Status = CM_Get_Device_ID_List_Ex(NULL, pBuffer, ulSize/2,
CM_GETIDLIST_FILTER_NONE, NULL);
if (Status != CR_BUFFER_SMALL) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
free(pBuffer);
// initialize device instance and interface guid for tests
lstrcpy(pDeviceID, TEXT("Root\\PnPTest\\0000"));
UuidFromString(TEXT("aaaaaaa2-e3f0-101b-8488-00aa003e5601"), &InterfaceGuid);
// Test 1. No DevNode, Get Present
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test 1 - No Devnode, Get-present"));
/*
Status = CM_Get_Interface_Device_List_Size(&ulSize, &InterfaceGuid, 0,
CM_GET_INTERFACE_DEVICE_LIST_PRESENT);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Size = %d"), ulSize);
} else {
wsprintf(szMsg, TEXT("Error getting size, %d"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
*/
ulSize = 0x53;
pBuffer = malloc(ulSize * sizeof(TCHAR));
Status = CM_Get_Device_Interface_List(&InterfaceGuid, 0, pBuffer, ulSize,
CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Status = %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
for (p = pBuffer; *p; p += lstrlen(pBuffer) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
}
}
free(pBuffer);
// Test 2. Devnode specified, Get Present
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test 2 - Devnode, Get-present"));
Status = CM_Get_Device_Interface_List_Size(&ulSize, &InterfaceGuid, pDeviceID,
CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Size = %d"), ulSize);
} else {
wsprintf(szMsg, TEXT("Error getting size, %d"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
pBuffer = malloc(ulSize * sizeof(TCHAR));
Status = CM_Get_Device_Interface_List(&InterfaceGuid, pDeviceID, pBuffer, ulSize,
CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Status = %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
for (p = pBuffer; *p; p += lstrlen(pBuffer) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
}
}
free(pBuffer);
// Test 3. No Devnode, Get All
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test 3 - No Devnode, Get-all"));
Status = CM_Get_Device_Interface_List_Size(&ulSize, &InterfaceGuid, 0,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Size = %d"), ulSize);
} else {
wsprintf(szMsg, TEXT("Error getting size, %d"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
pBuffer = malloc(ulSize * sizeof(TCHAR));
Status = CM_Get_Device_Interface_List(&InterfaceGuid, 0, pBuffer, ulSize,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Status = %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
for (p = pBuffer; *p; p += lstrlen(pBuffer) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
ulSize = MAX_PATH;
Status = CM_Get_Device_Interface_Alias(p, &InterfaceGuid, szAlias, &ulSize, 0);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Alias: %s"), szAlias);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
wsprintf(szMsg, TEXT("Error getting alias, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
}
}
free(pBuffer);
// Test 4. Devnode specified, Get All
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test 4 - Devnode, Get-all"));
Status = CM_Get_Device_Interface_List_Size(&ulSize, &InterfaceGuid, pDeviceID,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (Status == CR_SUCCESS) {
wsprintf(szMsg, TEXT("Size = %d"), ulSize);
} else {
wsprintf(szMsg, TEXT("Error getting size, %d"), Status);
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
pBuffer = malloc(ulSize * sizeof(TCHAR));
Status = CM_Get_Device_Interface_List(&InterfaceGuid, pDeviceID, pBuffer, ulSize,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Status = %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
for (p = pBuffer; *p; p += lstrlen(pBuffer) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
}
}
free(pBuffer);
// Test 5. Get aliases
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Test 5 - Get aliases"));
CM_Get_Device_Interface_List_Size(&ulSize, &InterfaceGuid, pDeviceID,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
pBuffer = malloc(ulSize * sizeof(TCHAR));
CM_Get_Device_Interface_List(&InterfaceGuid, pDeviceID, pBuffer, ulSize,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
for (p = pBuffer; *p; p += lstrlen(pBuffer) + 1) {
ulSize = MAX_PATH;
Status = CM_Get_Device_Interface_Alias(p, &InterfaceGuid, szAlias, &ulSize, 0);
if (Status == CR_SUCCESS) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szAlias);
} else {
wsprintf(szMsg, TEXT("Error getting alias, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
}
free(pBuffer);
return;
} // RegressionTest_DeviceList
//-----------------------------------------------------------------------------
VOID
RegressionTest_CreateDevNode(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
DEVNODE dnDevNode, dnParent, dnDevNode1, dnTemp;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH], szTemp[MAX_PATH];
ULONG ulSize = 0;
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)TEXT("____CreateDevNode REGRESSION TEST_____"));
lstrcpy(szMsg, TEXT("1. Locate Root DevNode: "));
Status = CM_Locate_DevNode(&dnParent, NULL, CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("2. Create Root\\CreateTest\\0000: "));
Status = CM_Create_DevNode(&dnDevNode, TEXT("Root\\CreateTest\\0000"),
dnParent, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("3. Locate Root\\CreateTest\\0000: "));
Status = CM_Locate_DevNode(&dnDevNode, TEXT("Root\\CreateTest\\0000"),
CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("4. Test generate id with bad device: "));
Status = CM_Create_DevNode(&dnTemp, TEXT("Create\\Test"),
dnParent, CM_CREATE_DEVNODE_GENERATE_ID);
if (Status != CR_INVALID_DEVICE_ID) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("5. Create based on CreateTest1: "));
Status = CM_Create_DevNode(&dnDevNode1, TEXT("CreateTest1"),
dnParent, CM_CREATE_DEVNODE_GENERATE_ID);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("6. Create Phantom Root\\CreateTest2\\0000: "));
Status = CM_Create_DevNode(&dnTemp, TEXT("Root\\CreateTest2\\0000"),
dnParent, CM_CREATE_DEVNODE_PHANTOM);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("7. Uninstall phantom Root\\CreateTest2\\0000: "));
Status = CM_Uninstall_DevNode(dnTemp, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("8. Uninstall real Root\\CreateTest1\\0000: "));
Status = CM_Uninstall_DevNode(dnDevNode1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("8. Cancel remove or real Root\\CreateTest1\\0000: "));
Status = CM_Locate_DevNode(&dnDevNode1, TEXT("Root\\CreateTest1\\0000"), CM_LOCATE_DEVNODE_CANCELREMOVE);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("9. Register device driver for Root\\Device001\\0000: "));
Status = CM_Locate_DevNode(&dnDevNode1, TEXT("Root\\Device001\\0000"), CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
Status = CM_Register_Device_Driver(dnDevNode1,
CM_REGISTER_DEVICE_DRIVER_DISABLEABLE | CM_REGISTER_DEVICE_DRIVER_REMOVABLE);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("REG1. test devnode handle consistency: "));
// create device id with generated instance
CM_Create_DevNode(&dnDevNode, TEXT("GenerateID"), dnParent,
CM_CREATE_DEVNODE_NORMAL | CM_CREATE_DEVNODE_GENERATE_ID);
// Get back the device id
CM_Get_Device_ID(dnDevNode, szTemp, MAX_PATH - 1, 0);
wsprintf(szMsg, TEXT(" Generated device instance: %s"), szTemp);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
CM_Locate_DevNode(&dnDevNode1, szTemp, 0);
if (dnDevNode != dnDevNode1) {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Created and located devnode handles don't match (error)"));
} else {
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)TEXT("Created and located devnode handles match (expected)"));
}
// if not generating an instance, the devinst must be a full valid devinst
// with the three component parts.
lstrcpy(szMsg, TEXT("REG2. Invalid device instance, no generate: "));
Status = CM_Create_DevNode(&dnDevNode, TEXT("BadDevInst"), dnParent,
CM_CREATE_DEVNODE_NORMAL);
if (Status == CR_INVALID_DEVINST) {
lstrcat(szMsg, TEXT("Failed (expected)"));
} else {
lstrcat(szMsg, TEXT("Error: should've failed"));
}
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
/*
lstrcpy(szMsg, TEXT("9. Move CreateTest\\0000 to CreateTest1\\0000: "));
Status = CM_Move_DevNode(dnDevNode, dnDevNode1, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
*/
return;
} // RegressionTest_CreateDevNode
//-----------------------------------------------------------------------------
VOID
RegressionTest_Properties(
HWND hDlg
)
{
CONFIGRET Status = CR_SUCCESS;
DEVNODE dnDevNode;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH], pszString[MAX_PATH];
LPTSTR p = NULL;
ULONG ulValue = 0, ulSize = 0, ulType = 0;
TCHAR pData[1024];
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)TEXT("____Properties REGRESSION TEST_____"));
Status = CM_Locate_DevNode(&dnDevNode, TEXT("Root\\Device001\\0000"),
CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
return;
}
CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_FRIENDLYNAME, NULL, 0, 0);
lstrcpy(szMsg, TEXT("Set/Get CM_DRP_FRIENDLYNAME: "));
lstrcpy(pszString, TEXT("FriendlyName"));
ulSize = (lstrlen(pszString) + 1) * sizeof(TCHAR);
Status = CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_FRIENDLYNAME,
pszString, ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_FRIENDLYNAME,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed, %s, %d"), pszString, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_DEVICEDESC, NULL, 0, 0);
lstrcpy(szMsg, TEXT("Set/Get DeviceDesc: "));
lstrcpy(pszString, TEXT("DeviceDesc"));
ulSize = (lstrlen(pszString) + 1) * sizeof(TCHAR);
Status = CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_DEVICEDESC,
pszString, ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_DEVICEDESC,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed, %s, %d"), pszString, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_CONFIGFLAGS, NULL, 0, 0);
lstrcpy(szMsg, TEXT("Set/Get CM_DRP_CONFIGFLAGS: "));
ulValue = 0x0008;
ulSize = sizeof(DWORD);
Status = CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_CONFIGFLAGS,
&ulValue, ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
ulValue = 0;
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_CONFIGFLAGS,
&ulType, &ulValue, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed, %d, %d"), ulValue, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//
// CM_DRP_LOCATION_INFORMATION
//
lstrcpy(szMsg, TEXT("CM_DRP_LOCATION_INFORMATION: "));
lstrcpy(pszString, TEXT("Madeup location"));
ulSize = (lstrlen(pszString) + 1) * sizeof(TCHAR);
Status = CM_Set_DevNode_Registry_Property(dnDevNode, CM_DRP_LOCATION_INFORMATION,
pszString, ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_LOCATION_INFORMATION,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
wsprintf(szMsg1, TEXT("Passed, %s, %d"), pszString, ulType);
}
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//
// CM_DRP_UPPER_FILTERS
//
lstrcpy(szMsg, TEXT("CM_DRP_LOWERFILTERS: "));
ulSize = MAX_PATH/sizeof(WCHAR);
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_LOWERFILTERS,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
wsprintf(szMsg1, TEXT("Passed, %d"), ulType);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
for (p = pszString; *p; p += lstrlen(p) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
}
}
//
// CM_DRP_UPPER_FILTERS
//
lstrcpy(szMsg, TEXT("CM_DRP_UPPERFILTERS: "));
ulSize = MAX_PATH/sizeof(WCHAR);
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_UPPERFILTERS,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
} else {
wsprintf(szMsg1, TEXT("Passed, %d"), ulType);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
for (p = pszString; *p; p += lstrlen(p) + 1) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)p);
}
}
//
// CM_DRP_CAPABILITIES
//
lstrcpy(szMsg, TEXT("CM_DRP_CAPABILITIES: "));
ulSize = sizeof(DWORD);
ulValue = 0;
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_CAPABILITIES,
&ulType, &ulValue, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
wsprintf(szMsg1, TEXT("Passed, value = %d, %d"), ulValue, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//
// CM_DRP_UI_NUMBER
//
lstrcpy(szMsg, TEXT("CM_DRP_UI_NUMBER: "));
ulSize = sizeof(DWORD);
ulValue = 0;
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_UI_NUMBER,
&ulType, &ulValue, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
wsprintf(szMsg1, TEXT("Passed, value = %d, %d"), ulValue, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//
// Another special test, go to a real devnode made by pnptest for this property
// since it's not in the registry: CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME
//
Status = CM_Locate_DevNode(&dnDevNode, TEXT("PnPTest\\Pdo0\\Root&LEGACY_PNPTEST&0000&1111"),
CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
return;
}
lstrcpy(szMsg, TEXT("CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME: "));
ulSize = MAX_PATH/sizeof(WCHAR);
pszString[0] = '\0';
Status = CM_Get_DevNode_Registry_Property(dnDevNode, CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME,
&ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
} else {
wsprintf(szMsg1, TEXT("Passed, %s, %d"), pszString, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
//----------------------------------------------------------------
// Add_ID test
//----------------------------------------------------------------
// clear hardware id property
CM_Set_DevNode_Registry_Property_Ex(dnDevNode, CM_DRP_HARDWAREID, NULL,
0, 0, hMachine);
lstrcpy(szMsg, TEXT("Add Hardware ID (SomeHardwareID\\0001): "));
Status = CM_Add_ID_Ex(dnDevNode, TEXT("SomeHardwareID\\0001"),
CM_ADD_ID_HARDWARE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Add Hardware ID (AnotherHardwareID\\0002): "));
Status = CM_Add_ID_Ex(dnDevNode, TEXT("AnotherHardwareID\\0002"),
CM_ADD_ID_HARDWARE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
ulSize = 1024;
Status = CM_Get_DevNode_Registry_Property_Ex(dnDevNode, CM_DRP_HARDWAREID,
&ulType, pData, &ulSize, 0, hMachine);
lstrcpy(szMsg, TEXT("Current HardwareID: "));
for (p = pData; *p; p += lstrlen(p) + 1) {
lstrcat(szMsg, p);
lstrcat(szMsg, TEXT(" "));
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
// clear compatible id property
CM_Set_DevNode_Registry_Property_Ex(dnDevNode, CM_DRP_COMPATIBLEIDS, NULL,
0, 0, hMachine);
lstrcpy(szMsg, TEXT("Add Compatible ID (SomeCompatibleID\\0001): "));
Status = CM_Add_ID_Ex(dnDevNode, TEXT("SomeCompatibleID\\0001"),
CM_ADD_ID_COMPATIBLE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("Add Compatible ID (AnotherCompatibleID\\0002): "));
Status = CM_Add_ID_Ex(dnDevNode, TEXT("AnotherCompatibleID\\0002"),
CM_ADD_ID_COMPATIBLE, hMachine);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed (%xh)"), Status);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
ulSize = 1024;
Status = CM_Get_DevNode_Registry_Property_Ex(dnDevNode, CM_DRP_COMPATIBLEIDS,
&ulType, pData, &ulSize, 0, hMachine);
lstrcpy(szMsg, TEXT("Current CompatibleID: "));
for (p = pData; *p; p += lstrlen(p) + 1) {
lstrcat(szMsg, p);
lstrcat(szMsg, TEXT(" "));
}
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
/*
lstrcpy(szMsg, TEXT("Read CM_DRP_DEVICEDESC: "));
ulSize = MAX_PATH;
Status = CM_Get_DevNode_Registry_Property(
dnDevNode, CM_DRP_DEVICEDESC, &ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else wsprintf(szMsg1, TEXT("Passed, %s %d"), pszString, ulType);
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("2. Read CM_DRP_HARDWAREID: "));
ulSize = MAX_PATH;
Status = CM_Get_DevNode_Registry_Property(
dnDevNode, CM_DRP_HARDWAREID, &ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed, %d, "), ulType);
for (p = pszString; *p; p += lstrlen(p)+1) {
lstrcat(szMsg1, p);
}
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("3. Read CM_DRP_COMPATIBLEIDS: "));
ulSize = MAX_PATH;
Status = CM_Get_DevNode_Registry_Property(
dnDevNode, CM_DRP_COMPATIBLEIDS, &ulType, pszString, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed, %d, "), ulType);
for (p = pszString; *p; p += lstrlen(p)+1) {
lstrcat(szMsg1, p);
}
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
lstrcpy(szMsg, TEXT("4. Read CM_DRP_CONFIGFLAGS: "));
ulSize = sizeof(ULONG);
Status = CM_Get_DevNode_Registry_Property(
dnDevNode, CM_DRP_CONFIGFLAGS, &ulType, &ulValue, &ulSize, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg1, TEXT("Failed (%xh)"), Status);
}
else {
wsprintf(szMsg1, TEXT("Passed, %d %d"), ulValue, ulType);
}
lstrcat(szMsg, szMsg1);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
*/
return;
} // RegressionTest_Properties
//-----------------------------------------------------------------------------
VOID
RegressionTest_DeviceClass(
HWND hDlg
)
{
CONFIGRET Status;
TCHAR szMsg[MAX_PATH], szMsg1[MAX_PATH];
TCHAR szDevice[MAX_PATH], szReference[MAX_PATH], szInterfaceDevice[MAX_PATH];
DEVNODE dnDevNode;
TCHAR Buffer[512];
PTSTR pBuffer = NULL;
GUID InterfaceGuid;
ULONG ulSize;
lstrcpy(szDevice, TEXT("PnPTest\\Pdo0\\Root&LEGACY_PNPTEST&0000&1111"));
//UuidFromString(TEXT("aaaaaaa2-e3f0-101b-8488-00aa003e5601"), &InterfaceGuid);
UuidFromString(TEXT("11111111-2222-3333-4444-555555555555"), &InterfaceGuid);
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)TEXT("____DEVICE CLASS REGRESSION TEST_____"));
//
// get a devinst handle for this device instance
//
Status = CM_Locate_DevNode(&dnDevNode, szDevice, CM_LOCATE_DEVNODE_NORMAL);
if (Status != CR_SUCCESS) {
return;
}
//
// Register a device class assocation with a ref string
//
lstrcpy(szReference, TEXT("RefStringA"));
ulSize = MAX_PATH;
Status = CM_Register_Device_Interface(dnDevNode, &InterfaceGuid,
szReference, szInterfaceDevice,
&ulSize, 0);
if (Status == CR_SUCCESS) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szInterfaceDevice);
} else {
wsprintf(szMsg, TEXT("Error registering dev class association, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
//
// Unregister the device class association
//
Status = CM_Unregister_Device_Interface(szInterfaceDevice, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Error unregistering dev class association, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
//
// Register a device class association without a ref string
//
ulSize = MAX_PATH;
Status = CM_Register_Device_Interface(dnDevNode, &InterfaceGuid,
NULL, szInterfaceDevice,
&ulSize, 0);
if (Status == CR_SUCCESS) {
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szInterfaceDevice);
} else {
wsprintf(szMsg, TEXT("Error registering dev class association, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
//
// Unregister the device class association
//
Status = CM_Unregister_Device_Interface(szInterfaceDevice, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("Error unregistering dev class association, %d"), Status);
SendDlgItemMessage(hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
}
return;
} // RegressionTest_DeviceClass
BOOL
DisplayRange(
IN HWND hDlg,
IN RANGE_LIST rlh
)
{
CONFIGRET Status = CR_SUCCESS;
DWORDLONG ulStart = 0, ulEnd = 0;
TCHAR szMsg[MAX_PATH], szTemp[MAX_PATH];
RANGE_LIST rlh1;
RANGE_ELEMENT rlElement;
Status = CM_First_Range(rlh, &ulStart, &ulEnd, &rlElement, 0);
if (Status != CR_SUCCESS) {
wsprintf(szMsg, TEXT("CM_First_Range failed (%xh)"), Status);
goto Clean0;
}
wsprintf(szMsg, TEXT("(%d,%d)"), (DWORD)ulStart, (DWORD)ulEnd);
while (Status == CR_SUCCESS) {
Status = CM_Next_Range(&rlElement, &ulStart, &ulEnd, 0);
if (Status == CR_SUCCESS) {
wsprintf(szTemp, TEXT(",(%d,%d)"), (DWORD)ulStart, (DWORD)ulEnd);
lstrcat(szMsg, szTemp);
}
}
Clean0:
SendDlgItemMessage(
hDlg, ID_LB_REGRESSION, LB_ADDSTRING, 0,
(LPARAM)(LPTSTR)szMsg);
return TRUE;
} // DisplayRange
BOOL
TraverseAndCheckParents (
DEVNODE dnParent
)
{
CONFIGRET configRet;
DEVNODE dnChild, dnDevNode;
// Get first child.
configRet = CM_Get_Child_Ex(&dnChild, dnParent, 0, hMachine);
if ((configRet != CR_SUCCESS) && (configRet != CR_NO_SUCH_DEVNODE)) {
MessageBox(NULL, TEXT("CM_Get_Child failed"), TEXT("Traversal Test"), MB_OK);
return FALSE;
}
// Check to see that the parent is correct and iterate thru the siblings.
while (configRet == CR_SUCCESS) {
configRet = CM_Get_Parent_Ex(&dnDevNode, dnChild, 0, hMachine);
if (configRet == CR_SUCCESS) {
if (dnDevNode != dnParent) {
// No parent, or not the correct parent.
MessageBox(NULL, TEXT("Not correct parent"), TEXT("Traversal Test"), MB_OK);
return FALSE;
}
} else {
MessageBox(NULL, TEXT("CM_Get_Parent failed"), TEXT("Traversal Test"), MB_OK);
return FALSE;
}
// Recursively traverse the hardware tree.
if (!TraverseAndCheckParents(dnChild)) {
return FALSE;
}
// Iterate thru the siblings.
configRet = CM_Get_Sibling_Ex(&dnChild, dnChild, 0, hMachine);
if ((configRet != CR_SUCCESS) && (configRet != CR_NO_SUCH_DEVNODE)) {
MessageBox(NULL, TEXT("CM_Get_Sibling failed"), TEXT("Traversal Test"), MB_OK);
return FALSE;
}
}
return TRUE;
} // TraverseAndCheckParents