ScsiInfoTst.cpp
上传用户:kenguan16
上传日期:2007-01-07
资源大小:103k
文件大小:3k
源码类别:

SCSI/ASPI

开发平台:

Visual C++

  1. // ScsiInfoTst.cpp : Defines the class behaviors for the application.
  2. //
  3. #include "stdafx.h"
  4. #include "ScsiInfoTst.h"
  5. #include "ScsiInfoTstDlg.h"
  6. #include "..scsiinfo.h"
  7. #include "ScsiDataDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CScsiInfoTstApp
  15. BEGIN_MESSAGE_MAP(CScsiInfoTstApp, CWinApp)
  16. //{{AFX_MSG_MAP(CScsiInfoTstApp)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG
  20. ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CScsiInfoTstApp construction
  24. CScsiInfoTstApp::CScsiInfoTstApp()
  25. {
  26. // TODO: add construction code here,
  27. // Place all significant initialization in InitInstance
  28. }
  29. /////////////////////////////////////////////////////////////////////////////
  30. // The one and only CScsiInfoTstApp object
  31. CScsiInfoTstApp theApp;
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CScsiInfoTstApp initialization
  34. BOOL CScsiInfoTstApp::InitInstance()
  35. {
  36. // Standard initialization
  37. // If you are not using these features and wish to reduce the size
  38. //  of your final executable, you should remove from the following
  39. //  the specific initialization routines you do not need.
  40. #ifdef _AFXDLL
  41. Enable3dControls(); // Call this when using MFC in a shared DLL
  42. #else
  43. Enable3dControlsStatic(); // Call this when linking to MFC statically
  44. #endif
  45. CScsiInfoTstDlg dlg;
  46. m_pMainWnd = &dlg;
  47. int nResponse = dlg.DoModal();
  48. if (nResponse == IDOK)
  49. {
  50. // TODO: Place code here to handle when the dialog is
  51. //  dismissed with OK
  52. }
  53. else if (nResponse == IDCANCEL)
  54. {
  55. // TODO: Place code here to handle when the dialog is
  56. //  dismissed with Cancel
  57. }
  58. // Since the dialog has been closed, return FALSE so that we exit the
  59. //  application, rather than start the application's message pump.
  60. return FALSE;
  61. }
  62. void CScsiInfoTstApp::AppScanDrives()
  63. {
  64. int PortNumber,PortId,TargetId,Lun;
  65. CString str;
  66. ScanDrives();
  67. for(char c = 'A'; c <= 'Z'; c++)
  68. {
  69. if(ERROR_SUCCESS == GetDriveInfo(c,&PortNumber,&PortId,&TargetId,&Lun))
  70. {
  71. str.Format("%c: port number %d path id %d target id %d lun %d",
  72. c,PortNumber,PortId,TargetId,Lun);
  73. }
  74. else
  75. {
  76. str.Format("%c: failed",c);
  77. }
  78. ((CScsiInfoTstDlg*)AfxGetMainWnd())->Log(str);
  79. }
  80. }
  81. void CScsiInfoTstApp::AppGetDriveLetter()
  82. {
  83. CScsiDataDlg dlg;
  84. if( IDOK == dlg.DoModal())
  85. {
  86. CString str;
  87. char cDriveLetter = ' ';
  88. DWORD PathId = atoi(dlg.m_szPathId);
  89. DWORD PortNumber = atoi(dlg.m_szPortNumber);
  90. DWORD TargetId = atoi(dlg.m_szTargetId);
  91. DWORD Lun = atoi(dlg.m_szLun);
  92. if(ERROR_SUCCESS == GetDriveLetter(&cDriveLetter,PortNumber,PathId,TargetId,Lun))
  93. {
  94. str.Format("drive %c port number %d path id %d target id %d lun %d",
  95. cDriveLetter,PortNumber,PathId,TargetId,Lun);
  96. }
  97. else
  98. {
  99. str.Format("no drive found for port number %d path id %d target id %d lun %d",
  100. PortNumber,PathId,TargetId,Lun);
  101. }
  102. ((CScsiInfoTstDlg*)AfxGetMainWnd())->Log(str);
  103. }
  104. }