当前位置: 首页 > news >正文

网站怎么做优化推广农安县建设局官方网站

网站怎么做优化推广,农安县建设局官方网站,中国建设银行北京天竺支行网站,2024小学生时事新闻十条引言#xff1a;笔者在工作过程中#xff0c;用户上报某某市信息科技学业水平测试软件在云电脑上打开初始化的情况下出现了加载和绑定机器失败的问题。一般情况下#xff0c;在实体机上用户进行登录后#xff0c;用户的账号信息跟主机的机器码进行绑定然后保存到配置文件笔者在工作过程中用户上报某某市信息科技学业水平测试软件在云电脑上打开初始化的情况下出现了加载和绑定机器失败的问题。一般情况下在实体机上用户进行登录后用户的账号信息跟主机的机器码进行绑定然后保存到配置文件等下次再次登录的时候就可以不用再次输入用户账户信息的情况下完成自动登录。但是用户反馈在我们的云电脑上出现了无法完成自动登录的情况。 解决过程 用dbgx64.exe对该软件进行逆向调试分析这里过程复杂不具体罗列发现该软件是用vb写的程序并最后调试并发现该软件获取机器序列号的函数该软件是通过DeviceIoControl这个Api来获取机器的序列号的通过hook该Api发现该软件会调用三次DeviceIoControl这个api来获取机器码。到底要hook哪一次的调用呢。 通过在网上找到vb程序写的获取机器码的相关代码代码放在后面的附录里面。通过vb6.0对改代码进行调试发现该代码基本就是该软件获取机器码的方式 并发现在云桌面上每次通过DeviceIoCtrol获取的机器码都是不一样的而在实体机上发现该Api调用会返回失败但为什么在实体机软件能运行正常呢这里猜测是软件在获取机器码失败的情况会通过固定算法自动生成一个ID的方式来替代本机的机器码而在云主机上由于每次调用DeviceIoCtrol都能调用成功但是获取的机器码不一样导致校验失败。 这里通过Hook DeviceIoCtrol并根据特定的ID进行返回失败操作来达到目的。可以通过CFF对软件进行修改导入表的方式来完成软件对自己插件的自动依赖和加载但同时考虑到软件软件的升级所以这里不建议直接给软件程序打补丁而是通过对软件依赖的msvbvm60.dll进行打补丁这样哪怕软件完成了升级也不会导致因为软件文件升级而导致补丁加载失效 附录代码 static BOOL(WINAPI* OrgDeviceIoControl)(HANDLE hDevice,DWORD dwIoControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned,LPOVERLAPPED lpOverlapped ) DeviceIoControl;BOOL WINAPI NewDeviceIoControl(HANDLE hDevice,DWORD dwIoControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned,LPOVERLAPPED lpOverlapped ) {BOOL bRet OrgDeviceIoControl(hDevice,dwIoControlCode,lpInBuffer,nInBufferSize,lpOutBuffer,nOutBufferSize,lpBytesReturned,lpOverlapped);//IOCTL_DISK_GET_DRIVE_GEOMETRY;/* if (0x74080 dwIoControlCode || 0x7C084 dwIoControlCode || dwIoControlCode 0x7C088){bRet FALSE;return FALSE;} */if (dwIoControlCode 0x7C088){bRet FALSE;OutputDebugString(LDeviceIoCtrol Code is 0x7C088, process it!);SENDCMDOUTPARAMS out;int outparamsize sizeof(out);memcpy(out, lpOutBuffer, sizeof(out));IDSECTOR idsector;memcpy(idsector, out.bBuffer[0], sizeof(idsector));char* pcNumber idsector.sModelNumber;__int64 pNumber (__int64)pcNumber;__int64 pFirmware (__int64)idsector.sFirmwareRev;__int64 pSerNum (__int64)idsector.sSerialNumber;WCHAR szBuf[350] { 0 };wsprintf(szBuf, L sModelNumber 1:0x%p 0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X %02X %02X %02X %02X \n,pcNumber, *(char*)(pNumber0), *(char*)(pNumber 1), *(char*)(pNumber 2), *(char*)(pNumber 3), *(char*)(pNumber 4), *(char*)(pNumber 5), *(char*)(pNumber 6), *(char*)(pNumber 7),*(char*)(pNumber 8), *(char*)(pNumber 9), *(char*)(pNumber 10), *(char*)(pNumber 11), *(char*)(pNumber 12), *(char*)(pNumber 13), *(char*)(pNumber 14), *(char*)(pNumber 15),*(char*)(pNumber 16), *(char*)(pNumber 17), *(char*)(pNumber 18), *(char*)(pNumber 19), *(char*)(pNumber 20), *(char*)(pNumber 21), *(char*)(pNumber 22), *(char*)(pNumber 23),*(char*)(pNumber 24), *(char*)(pNumber 25), *(char*)(pNumber 26), *(char*)(pNumber 27), *(char*)(pNumber 28), *(char*)(pNumber 29), *(char*)(pNumber 30), *(char*)(pNumber 31),*(char*)(pNumber 32), *(char*)(pNumber 33), *(char*)(pNumber 34), *(char*)(pNumber 35), *(char*)(pNumber 36), *(char*)(pNumber 37), *(char*)(pNumber 38), *(char*)(pNumber 39));OutputDebugStringW(szBuf);wsprintf(szBuf, L sFirmwareRev 2:0x%p 0x%02X %02X %02X %02X %02X %02X %02X %02X \n,pFirmware, *(char*)(pFirmware 0), *(char*)(pFirmware 1), *(char*)(pFirmware 2), *(char*)(pFirmware 3), *(char*)(pFirmware 4), *(char*)(pFirmware 5), *(char*)(pFirmware 6), *(char*)(pFirmware 7));OutputDebugStringW(szBuf);wsprintf(szBuf, LsSerialNumber 3:0x%p 0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X %02X %02X %02X %02X \nL0x%02X %02X %02X %02X \n,pSerNum, *(char*)(pSerNum 0), *(char*)(pSerNum 1), *(char*)(pSerNum 2), *(char*)(pSerNum 3), *(char*)(pSerNum 4), *(char*)(pSerNum 5), *(char*)(pSerNum 6), *(char*)(pSerNum 7),*(char*)(pSerNum 8), *(char*)(pSerNum 9), *(char*)(pSerNum 10), *(char*)(pSerNum 11), *(char*)(pSerNum 12), *(char*)(pSerNum 13), *(char*)(pSerNum 14), *(char*)(pSerNum 15),*(char*)(pSerNum 16), *(char*)(pSerNum 17), *(char*)(pSerNum 18), *(char*)(pSerNum 19));OutputDebugStringW(szBuf);}return bRet; }bool Hook() {// 相关的初始化信息DetourTransactionBegin();// 更新线程信息 DetourUpdateThread(GetCurrentThread());DetourAttach((PVOID)OrgDeviceIoControl, NewDeviceIoControl);// org_vbaStrCmp (_vbaStrCmp)GetProcAddress(LoadLibraryA(msvbvm60.dll), __vbaStrCmp);//int iRet2 DetourAttach((PVOID)org_vbaStrCmp, new_vbaStrCmp);return NO_ERROR DetourTransactionCommit(); }// 卸载Hook bool UnHoo() {DetourTransactionBegin();DetourUpdateThread(GetCurrentThread());return NO_ERROR DetourTransactionCommit(); } C#获取机器码的相关代码 VERSION 5.00 Begin VB.Form Form1 Caption Form1ClientHeight 3015ClientLeft 120ClientTop 465ClientWidth 4560LinkTopic Form1ScaleHeight 3015ScaleWidth 4560StartUpPosition 3 窗口缺省Begin VB.CommandButton Command1 Caption Command1Height 855Left 1080TabIndex 0Top 600Width 1335End End Attribute VB_Name Form1 Attribute VB_GlobalNameSpace False Attribute VB_Creatable False Attribute VB_PredeclaredId True Attribute VB_Exposed False 模块功能取得硬盘的信息 编 程来自互联网阿勇修改 更新日期2005/7/8 调用方法GetDiskVolume() 取得逻辑盘的序列号GetHardDiskInfo() 取得物理盘的型号或序列号 Private Const MAX_IDE_DRIVES As Long 4 Private Const READ_ATTRIBUTE_BUFFER_SIZE As Long 512 Private Const IDENTIFY_BUFFER_SIZE As Long 512 Private Const READ_THRESHOLD_BUFFER_SIZE As Long 512 Private Const DFP_GET_VERSION As Long H74080 Private Const DFP_SEND_DRIVE_COMMAND As Long H7C084 Private Const DFP_RECEIVE_DRIVE_DATA As Long H7C088Private Type GETVERSIONOUTPARAMSbVersion As Byte Binary driver version.bRevision As Byte Binary driver revision.bReserved As Byte Not used.bIDEDeviceMap As Byte Bit map of IDE devices.fCapabilities As Long Bit mask of driver capabilities.dwReserved(3) As Long For future use. End TypePrivate Const CAP_IDE_ID_FUNCTION As Long 1 ATA ID command supported Private Const CAP_IDE_ATAPI_ID As Long 2 ATAPI ID command supported Private Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long 4 SMART commannds supportedPrivate Type IDEREGSbFeaturesReg As Byte Used for specifying SMART commands.bSectorCountReg As Byte IDE sector count registerbSectorNumberReg As Byte IDE sector number registerbCylLowReg As Byte IDE low order cylinder valuebCylHighReg As Byte IDE high order cylinder valuebDriveHeadReg As Byte IDE drive/head registerbCommandReg As Byte Actual IDE command.bReserved As Byte reserved for future use. Must be zero. End TypePrivate Type SENDCMDINPARAMScBufferSize As Long Buffer size in bytesirDriveRegs As IDEREGS Structure with drive register values.bDriveNumber As Byte Physical drive number to send command to (0,1,2,3).bReserved(2) As Byte Reserved for future expansion.dwReserved(3) As Long For future use.bBuffer(0) As Byte Input buffer. End TypePrivate Const IDE_ATAPI_ID As Long HA1 Returns ID sector for ATAPI. Private Const IDE_ID_FUNCTION As Long HEC Returns ID sector for ATA. Private Const IDE_EXECUTE_SMART_FUNCTION As Long HB0 Performs SMART cmd. Private Const SMART_CYL_LOW As Long H4F Private Const SMART_CYL_HI As Long HC2Private Type DRIVERSTATUSbDriverError As Byte Error code from driver,bIDEStatus As Byte Contents of IDE Error register.bReserved(1) As Byte Reserved for future expansion.dwReserved(1) As Long Reserved for future expansion. End TypePrivate Const SMART_NO_ERROR As Long 0 No error Private Const SMART_IDE_ERROR As Long 1 Error from IDE controller Private Const SMART_INVALID_FLAG As Long 2 Invalid command flag Private Const SMART_INVALID_COMMAND As Long 3 Invalid command byte Private Const SMART_INVALID_BUFFER As Long 4 Bad buffer (null, invalid addr..) Private Const SMART_INVALID_DRIVE As Long 5 Drive number not valid Private Const SMART_INVALID_IOCTL As Long 6 Invalid IOCTL Private Const SMART_ERROR_NO_MEM As Long 7 Could not lock users buffer Private Const SMART_INVALID_REGISTER As Long 8 Some IDE Register not valid Private Const SMART_NOT_SUPPORTED As Long 9 Invalid cmd flag set Private Const SMART_NO_IDE_DEVICE As Long 10 Cmd issued to device not presentPrivate Type SENDCMDOUTPARAMScBufferSize As Long Size of bBuffer in bytesdrvStatus As DRIVERSTATUS Driver status structure.bBuffer(0) As Byte Buffer of arbitrary length in which to store the data read from the drive. End TypePrivate Const SMART_READ_ATTRIBUTE_VALUES As Long HD0 ATA4: Renamed Private Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long HD1 Obsoleted in ATA4! Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long HD2 Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long HD3 Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long HD4 ATA4 Private Const SMART_ENABLE_SMART_OPERATIONS As Long HD8 Private Const SMART_DISABLE_SMART_OPERATIONS As Long HD9 Private Const SMART_RETURN_SMART_STATUS As Long HDAPrivate Type DRIVEATTRIBUTEbAttrID As Byte Identifies which attributewStatusFlags As Integer see bit definitions belowbAttrValue As Byte Current normalized valuebWorstValue As Byte How bad has it ever been?bRawValue(5) As Byte Un-normalized valuebReserved As Byte ... End TypePrivate Type ATTRTHRESHOLDbAttrID As Byte Identifies which attributebWarrantyThreshold As Byte Triggering valuebReserved(9) As Byte ... End TypePrivate Type IDSECTORwGenConfig As IntegerwNumCyls As IntegerwReserved As IntegerwNumHeads As IntegerwBytesPerTrack As IntegerwBytesPerSector As IntegerwSectorsPerTrack As IntegerwVendorUnique(2) As IntegersSerialNumber(19) As BytewBufferType As IntegerwBufferSize As IntegerwECCSize As IntegersFirmwareRev(7) As BytesModelNumber(39) As BytewMoreVendorUnique As IntegerwDoubleWordIO As IntegerwCapabilities As IntegerwReserved1 As IntegerwPIOTiming As IntegerwDMATiming As IntegerwBS As IntegerwNumCurrentCyls As IntegerwNumCurrentHeads As IntegerwNumCurrentSectorsPerTrack As IntegerulCurrentSectorCapacity(3) As Byte 这里只能用byte因为VB没有无符号的LONG型变量wMultSectorStuff As IntegerulTotalAddressableSectors(3) As Byte 这里只能用byte因为VB没有无符号的LONG型变量wSingleWordDMA As IntegerwMultiWordDMA As IntegerbReserved(127) As Byte End TypePrivate Const ATTR_INVALID As Long 0 Private Const ATTR_READ_ERROR_RATE As Long 1 Private Const ATTR_THROUGHPUT_PERF As Long 2 Private Const ATTR_SPIN_UP_TIME As Long 3 Private Const ATTR_START_STOP_COUNT As Long 4 Private Const ATTR_REALLOC_SECTOR_COUNT As Long 5 Private Const ATTR_READ_CHANNEL_MARGIN As Long 6 Private Const ATTR_SEEK_ERROR_RATE As Long 7 Private Const ATTR_SEEK_TIME_PERF As Long 8 Private Const ATTR_POWER_ON_HRS_COUNT As Long 9 Private Const ATTR_SPIN_RETRY_COUNT As Long 10 Private Const ATTR_CALIBRATION_RETRY_COUNT As Long 11 Private Const ATTR_POWER_CYCLE_COUNT As Long 12Private Const PRE_FAILURE_WARRANTY As Long H1 Private Const ON_LINE_COLLECTION As Long H2 Private Const PERFORMANCE_ATTRIBUTE As Long H4 Private Const ERROR_RATE_ATTRIBUTE As Long H8 Private Const EVENT_COUNT_ATTRIBUTE As Long H10 Private Const SELF_PRESERVING_ATTRIBUTE As Long H20Private Const NUM_ATTRIBUTE_STRUCTS As Long 30 Private Const INVALID_HANDLE_VALUE As Long -1Private Const VER_PLATFORM_WIN32s As Long 0 Private Const VER_PLATFORM_WIN32_WINDOWS As Long 1 Private Const VER_PLATFORM_WIN32_NT As Long 2Private Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDVersion As String * 128 Maintenance string for PSS usage End TypePrivate Const CREATE_NEW As Long 1 Private Const GENERIC_READ As Long H80000000 Private Const GENERIC_WRITE As Long H40000000 Private Const FILE_SHARE_READ As Long H1 Private Const FILE_SHARE_WRITE As Long H2 Private Const OPEN_EXISTING As Long 3Private m_DiskInfo As IDSECTORPrivate Declare Function GetVersionEx Lib kernel32 Alias GetVersionExA (lpVersionInformation As OSVERSIONINFO) As Long Private Declare Function CreateFile Lib kernel32 Alias CreateFileA (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function DeviceIoControl Lib kernel32 (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long Private Declare Function CloseHandle Lib kernel32 (ByVal hObject As Long) As Long Private Declare Sub CopyMemory Lib kernel32 Alias RtlMoveMemory (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function GetVolumeInformation Lib kernel32 Alias GetVolumeInformationA (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long信息类型枚举 Enum eumInfoTypehdmodelsn 0hdOnlyModel 1hdOnlySN 2 End Enum磁盘通道枚举 Enum eumDiskNohdPrimaryMaster 0hdPrimarySlave 1hdSecondaryMaster 2hdSecondarySlave 3 End Enum取得逻辑盘序列号非唯一 Function GetDiskVolume(Optional ByVal strDiskName C) As StringDim TempStr1 As String * 256, TempStr2 As String * 256Dim TempLon1 As Long, TempLon2 As Long, GetVal As LongDim tmpVol As StringCall GetVolumeInformation(strDiskName :/, TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)If GetVal 0 ThentmpVol ElsetmpVol Hex(GetVal)tmpVol String(8 - Len(tmpVol), 0) tmpVoltmpVol Left(tmpVol, 4) - Right(tmpVol, 4)End IfGetDiskVolume tmpVol End Function取得硬盘信息型号/物理系列号唯一 Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo hdPrimaryMaster, Optional ByVal numType As eumInfoType hdOnlySN) As StringIf GetDiskInfo(numDisk) 1 ThenDim pSerialNumber As String, pModelNumber As StringpSerialNumber StrConv(m_DiskInfo.sSerialNumber, vbUnicode)pModelNumber StrConv(m_DiskInfo.sModelNumber, vbUnicode)Select Case numTypeCase hdOnlyModel 仅型号GetHardDiskInfo Trim(pModelNumber)Case hdOnlySN 仅系列号GetHardDiskInfo Trim(pSerialNumber)Case Else 型号,系列号GetHardDiskInfo Trim(pModelNumber) , Trim(pSerialNumber)End SelectEnd IfEnd FunctionPrivate Function OpenSMART(ByVal nDrive As Byte) As LongDim hSMARTIOCTL As LongDim hd As StringDim VersionInfo As OSVERSIONINFOhSMARTIOCTL INVALID_HANDLE_VALUEVersionInfo.dwOSVersionInfoSize Len(VersionInfo)GetVersionEx VersionInfoSelect Case VersionInfo.dwPlatformIdCase VER_PLATFORM_WIN32sOpenSMART hSMARTIOCTLCase VER_PLATFORM_WIN32_WINDOWShSMARTIOCTL CreateFile(//./SMARTVSD, 0, 0, 0, CREATE_NEW, 0, 0)Case VER_PLATFORM_WIN32_NTIf nDrive MAX_IDE_DRIVES Thenhd //./PhysicalDrive nDrivehSMARTIOCTL CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)End IfEnd SelectOpenSMART hSMARTIOCTLEnd FunctionPrivate Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize IDENTIFY_BUFFER_SIZEpSCIP.irDriveRegs.bFeaturesReg 0pSCIP.irDriveRegs.bSectorCountReg 1pSCIP.irDriveRegs.bSectorNumberReg 1pSCIP.irDriveRegs.bCylLowReg 0pSCIP.irDriveRegs.bCylHighReg 0pSCIP.irDriveRegs.bDriveHeadReg HA0 Or ((bDriveNum And 1) * 2 ^ 4)pSCIP.irDriveRegs.bCommandReg bIDCmdpSCIP.bDriveNumber bDriveNumpSCIP.cBufferSize IDENTIFY_BUFFER_SIZEDoIDENTIFY CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, _pSCIP, 32, _pSCOP(0), 528, _lpcbBytesReturned, 0))End FunctionPrivate Function DoEnableSMART(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize 0pSCIP.irDriveRegs.bFeaturesReg SMART_ENABLE_SMART_OPERATIONSpSCIP.irDriveRegs.bSectorCountReg 1pSCIP.irDriveRegs.bSectorNumberReg 1pSCIP.irDriveRegs.bCylLowReg SMART_CYL_LOWpSCIP.irDriveRegs.bCylHighReg SMART_CYL_HIpSCIP.irDriveRegs.bDriveHeadReg HA0 Or ((bDriveNum And 1) * 2 ^ 4)pSCIP.irDriveRegs.bCommandReg IDE_EXECUTE_SMART_FUNCTIONpSCIP.bDriveNumber bDriveNumDoEnableSMART CBool(DeviceIoControl(hSMARTIOCTL, DFP_SEND_DRIVE_COMMAND, _pSCIP, LenB(pSCIP) - 1, _pSCOP, LenB(pSCOP) - 1, _lpcbBytesReturned, 0))End Function--------------------------------------------------------------------- --------------------------------------------------------------------- Private Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As Integer)Dim i As IntegerDim bTemp As ByteFor i 0 To uscStrSize - 1 Step 2bTemp szString(i)szString(i) szString(i 1)szString(i 1) bTempNext iEnd SubPrivate Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As SENDCMDINPARAMS, ByVal bIDCmd As Byte, ByVal bDfpDriveMap As Byte, ByVal bDriveNum As Byte)ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) 1ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) 1ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) 1End SubPublic Function GetDiskInfo(ByVal nDrive As Byte) As LongDim hSMARTIOCTL As LongDim cbBytesReturned As LongDim VersionParams As GETVERSIONOUTPARAMSDim scip As SENDCMDINPARAMSDim scop() As ByteDim OutCmd As SENDCMDOUTPARAMSDim bDfpDriveMap As ByteDim bIDCmd As Byte IDE or ATAPI IDENTIFY cmdDim uDisk As IDSECTORm_DiskInfo uDiskhSMARTIOCTL OpenSMART(nDrive)If hSMARTIOCTL INVALID_HANDLE_VALUE ThenCall DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)If Not (VersionParams.bIDEDeviceMap / 2 ^ nDrive And H10) ThenIf DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) ThenbDfpDriveMap bDfpDriveMap Or 2 ^ nDriveEnd IfEnd IfbIDCmd IIf((VersionParams.bIDEDeviceMap / 2 ^ nDrive And H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)ReDim scop(LenB(OutCmd) IDENTIFY_BUFFER_SIZE - 1) As ByteIf DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) ThenCopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4), LenB(m_DiskInfo)Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)CloseHandle hSMARTIOCTLGetDiskInfo 1Exit Function --- BottomEnd IfCloseHandle hSMARTIOCTLGetDiskInfo 0Else NOT HSMARTIOCTL...GetDiskInfo -1End IfEnd FunctionPrivate Sub Command1_Click()result MsgBox(你喜欢蓝色吗?, 3, 选择一个选项)GetDiskInfo (0)End Sub
http://www.zqtcl.cn/news/720888/

相关文章:

  • 长春市建设工程造价管理协会网站厦门网站建设费用
  • 广东建设信息公开网站怎样策划一个营销型网站
  • 魔兽做图下载网站如何经营一个购物网站
  • 深圳做网站哪个平台好一级消防工程师考试题型
  • 网站婚礼服务态网站建设论文网站设计有限公司是干嘛的
  • 邯郸网站建设效果好广西做网站的公司
  • 网站logo上传营销型网站制作方案
  • 小说网站静态模板站长工具seo综合查询adc
  • 北京响应式网站做logo那个网站
  • 如何申请免费网站空间刚察县wap网站建设公司
  • 哪里有网站推广软件免费推广seo策略方法
  • 阿里云备案网站 网站名称怎么写京icp备案查询
  • 网站开发岗位思维导图alexa排名
  • 自适应网站建设济南济南网站建设公司
  • 巴州网站建设库尔勒网站建设钟爱网络杭州微信网站制作
  • 52做网站南京市住房城乡建设门户网站
  • 网站开发精品课程贵阳市白云区官方网站
  • seo整站优化服务会计培训班一般收费多少
  • 批量网站访问检测怎么做好手机网站开发
  • 深圳网站建设公司哪家比较好shortcodes wordpress
  • 网站内链越多越好嘛可以做3d电影网站
  • 企业网站需求文档微商引流客源最快的方法
  • 交互式网站备案业务网站在线生成
  • 自建网站百度个人网站如何在百度上做推广
  • 如何安装wordpress模板竞价网站做seo
  • 做论坛网站如何赚钱电子商务营销推广
  • 想要自己做一个网站怎么做济宁百度网站建设
  • 海会网络建设网站wordpress刷不出图片
  • 一个人做商城网站网站推广的几个阶段
  • 做国学类网站合法吗html5教程pdf下载