CreateMutex AfxOleInit() AfxOleGetMessageFilter()->SetMessagePendingDelay AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE) AfxOleGetMessageFilter()->EnableBusyDialog(FALSE) dlg.DoModal() CAtaSmart::Init WMI on - Start CoInitializeSecurity() CoCreateInstance() ConnectServer() CoSetProxyBlanket() OK:WMI Init OK:Win32_IDEController OK:Win32_SCSIController OK:Win32_USBController WakeUp(0) WakeUp(1) WakeUp(2) WakeUp(3) WakeUp(4) DO:SELECT * FROM Win32_DiskDrive OK1:SELECT * FROM Win32_DiskDrive uReturned != 1 OK2:SELECT * FROM Win32_DiskDrive DO:SELECT * FROM Win32_DiskPartition OK:SELECT * FROM Win32_DiskPartition OK:Drive Letter Mapping DO:GetDiskInfo GetDiskInfo DoIdentifyDevicePd(0, 0xA0) - 1 SendAtaCommandPd - IDENTIFY_DEVICE (ATA_PASS_THROUGH) SendAtaCommandPd - IDENTIFY_DEVICE AddDisk(0, -1, -1) - 6 GetSmartAttributePd(0) - 1 SendAtaCommandPd - SMART_READ_DATA SendAtaCommandPd - SMART_READ_DATA SendAtaCommandPd - SMART_READ_THRESHOLDS OK:GetDiskInfo Check Reverse DO:GetDiskInfo GetDiskInfo DoIdentifyDevicePd(1, 0xA0) - 1 SendAtaCommandPd - IDENTIFY_DEVICE (ATA_PASS_THROUGH) SendAtaCommandPd - IDENTIFY_DEVICE AddDisk(1, -1, -1) - 6 GetSmartAttributePd(1) - 1 SendAtaCommandPd - SMART_READ_DATA