全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:7632
推到 Plurk!
推到 Facebook!

如何讀取硬碟bios顯示的總容量

尚未結案
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-06 01:52:46 IP:61.64.xxx.xxx 未訂閱
請問一下 如何在win2000下讀取 硬碟的問題 1 如何讀取硬碟的bios顯示型號 2 如何讀取硬碟bios顯示的總容量 3 如何讀取RAID的硬碟數量 4 不論此硬碟是否有隱藏檔或非windows的分割區 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 這是 dllee 大仔與lcsboy 大仔幫忙的 要讀出實體硬體的資料/廠商/型號/序號/大小等等,可以透過 ATA Command ,如 lcsboy 所發表的: 【BCB】【分享】在Win2K/WinXP/Win.Net讀出硬碟序號  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21428 【BCB】【發表】WinRing:任何函式皆可隨意進入Ring0(含Source)  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27086    至於要不要寫 DDK ,以 lscboy 的方法,好像都要吧... 不過 lscboy 都已幫我們寫好了     剛找了一下發現 http://www.winsim.com/diskid32/diskid32.html 有 VC source 應可以滿足您的需求,在 2K/XP 下不需要 ddk 的樣子 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 不過 庵找過的一套軟體 http://www.r-tt.com/ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31793 上述的解答 好像已經是解答了 不過 庵不知道 ATA Command 哈哈 庵 手上還有一隻 8051 的exe他應該不是ddk喔 連硬碟的快取 馬達轉數都有數據 這是在2000下執行的喔 不是在純dos下喔 別攪混了 所以 應該還有其他方法 不知道有人知道嗎? delphi可以呼叫嗎?
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-08 05:40:33 IP:61.70.xxx.xxx 未訂閱
J SIR  給你參考    *****************************************************************  ' Module for performing Direct Read/Write access to disk sectors  '  ' Written by Arkadiy Olovyannikov (ark@fesma.ru)  '*****************************************************************  Option Explicit     Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)     Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)     '*************Win9x direct Read/Write Staff**********  Public Enum FAT_WRITE_AREA_CODE      FAT_AREA = &H2001      ROOT_DIR_AREA = &H4001      DATA_AREA = &H6001  End Enum     Private Type DISK_IO    dwStartSector As Long    wSectors As Integer    dwBuffer As Long  End Type       Private Type DIOC_REGISTER    reg_EBX As Long    reg_EDX As Long    reg_ECX As Long    reg_EAX As Long    reg_EDI As Long    reg_ESI As Long    reg_Flags As Long  End Type     Private Const VWIN32_DIOC_DOS_IOCTL = 1& 'Int13 - 440X functions  Private Const VWIN32_DIOC_DOS_INT25 = 2& 'Int25 - Direct Read Command  Private Const VWIN32_DIOC_DOS_INT26 = 3& 'Int26 - Direct Write Command  Private Const VWIN32_DIOC_DOS_DRIVEINFO = 6& 'Extended Int 21h function 7305h     Private Const FILE_DEVICE_FILE_SYSTEM = &H9&  Private Const FILE_ANY_ACCESS = 0  Private Const FILE_READ_ACCESS = &H1  Private Const FILE_WRITE_ACCESS = &H2     Private Const GENERIC_READ = &H80000000  Private Const GENERIC_WRITE = &H40000000  Private Const FILE_SHARE_READ = &H1  Private Const FILE_SHARE_WRITE = &H2  Private Const OPEN_EXISTING = 3  Private Const INVALID_HANDLE_VALUE = -1&     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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long     Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, ByRef lpInBuffer As Any, ByVal nInBufferSize As Long, ByRef lpOutBuffer As Any, ByVal nOutBufferSize As Long, ByRef lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long     '****************** NT direct Read/Write staff**************************************************  Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long     Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long     Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long     Private Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long     Private Declare Function LockFile Lib "kernel32" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToLockLow As Long, ByVal nNumberOfBytesToLockHigh As Long) As Long     Private Declare Function UnlockFile Lib "kernel32" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToUnlockLow As Long, ByVal nNumberOfBytesToUnlockHigh As Long) As Long     Private Const FILE_BEGIN = 0     Public Function DirectReadDrive(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal cBytes As Long) As Variant     If IsWindowsNT Then        DirectReadDrive = DirectReadDriveNT(sDrive, iStartSec, iOffset, cBytes)     Else        If FSName = "FAT12" Or FSName = "FAT16" Then           DirectReadDrive = DirectReadFloppy9x(sDrive, iStartSec, iOffset, cBytes)        Else           DirectReadDrive = DirectReadDrive9x(sDrive, iStartSec, iOffset, cBytes)        End If     End If  End Function     Public Function DirectWriteDrive(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal sWrite As String, Optional AreaCode As FAT_WRITE_AREA_CODE = DATA_AREA) As Boolean     If IsWindowsNT Then        DirectWriteDrive = DirectWriteDriveNT(sDrive, iStartSec, iOffset, sWrite)     Else        If FSName = "FAT12" Or FSName = "FAT16" Then           DirectWriteDrive = DirectWriteFloppy9x(sDrive, iStartSec, iOffset, sWrite)        Else           DirectWriteDrive = DirectWriteDrive9x(sDrive, iStartSec, iOffset, sWrite, AreaCode)        End If     End If  End Function     '===Direct Read/Write floppy using Int25/26===  'Works only for FAT12/16 systems, but much more quicker  'Then Int21 7305 function     Private Function DirectReadFloppy9x(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal cBytes As Long) As Variant      Dim hDevice As Long      Dim reg As DIOC_REGISTER      Dim nSectors As Long      Dim aOutBuff() As Byte      Dim abResult() As Byte      Dim nRead As Long      nSectors = Int((iOffset + cBytes - 1) / BytesPerSector) + 1      ReDim aOutBuff(nSectors * BytesPerSector)      ReDim abResult(cBytes - 1) As Byte      With reg         .reg_EAX = Asc(UCase(sDrive)) - Asc("A")         .reg_ESI = &H6000         .reg_ECX = nSectors         .reg_EBX = VarPtr(aOutBuff(0))         .reg_EDX = iStartSec      End With      hDevice = CreateFile("\\.\VWIN32", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      Call DeviceIoControl(hDevice, VWIN32_DIOC_DOS_INT25, reg, Len(reg), reg, Len(reg), nRead, 0&)      CloseHandle hDevice      CopyMemory abResult(0), aOutBuff(iOffset), cBytes      DirectReadFloppy9x = abResult  End Function     Private Function DirectWriteFloppy9x(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal sWrite As String) As Boolean      Dim hDevice As Long      Dim reg As DIOC_REGISTER      Dim nSectors As Long      Dim abBuff() As Byte      Dim ab() As Byte      Dim nRead As Long      nSectors = Int((iOffset + Len(sWrite) - 1) / BytesPerSector) + 1      abBuff = DirectReadFloppy9x(sDrive, iStartSec, 0, nSectors * BytesPerSector)      ab = StrConv(sWrite, vbFromUnicode)      CopyMemory abBuff(iOffset), ab(0), Len(sWrite)      With reg         .reg_EAX = Asc(UCase(sDrive)) - Asc("A")         .reg_ESI = &H6000         .reg_ECX = nSectors         .reg_EBX = VarPtr(abBuff(0))         .reg_EDX = iStartSec      End With      hDevice = CreateFile("\\.\VWIN32", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      DirectWriteFloppy9x = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_INT26, reg, Len(reg), reg, Len(reg), nRead, 0&) And Not (reg.reg_Flags And 1)      CloseHandle hDevice  End Function     '====Direct Read/Write drive using Int21 function 7305h====  'works with FAT12/16/32     Private Function DirectReadDrive9x(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal cBytes As Long) As Variant      Dim hDevice As Long      Dim reg As DIOC_REGISTER      Dim dio As DISK_IO      Dim abDioBuff() As Byte      Dim nSectors As Long      Dim aOutBuff() As Byte      Dim abResult() As Byte      Dim nRead As Long      nSectors = Int((iOffset + cBytes - 1) / BytesPerSector) + 1      ReDim abResult(cBytes - 1) As Byte      ReDim aOutBuff(nSectors * BytesPerSector - 1)      With dio          .dwStartSector = iStartSec          .wSectors = CInt(nSectors)          .dwBuffer = VarPtr(aOutBuff(0))      End With      ReDim abDioBuff(LenB(dio) - 1)      CopyMemory abDioBuff(0), dio, LenB(dio)      CopyMemory abDioBuff(6), abDioBuff(8), 4&      With reg         .reg_EAX = &H7305 'function number         .reg_ECX = -1&         .reg_EBX = VarPtr(abDioBuff(0))         .reg_EDX = Asc(UCase(sDrive)) - Asc("A") + 1      End With      hDevice = CreateFile("\\.\VWIN32", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      Call DeviceIoControl(hDevice, VWIN32_DIOC_DOS_DRIVEINFO, reg, Len(reg), reg, Len(reg), nRead, 0&)      CloseHandle hDevice      CopyMemory abResult(0), aOutBuff(iOffset), cBytes      DirectReadDrive9x = abResult  End Function     Private Function DirectWriteDrive9x(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal sWrite As String, ByVal AreaCode As FAT_WRITE_AREA_CODE) As Boolean      Dim hDevice As Long, nSectors As Long      Dim nRead As Long      Dim reg As DIOC_REGISTER      Dim dio As DISK_IO      Dim abDioBuff() As Byte      Dim abBuff() As Byte      Dim ab() As Byte      Dim bLocked As Boolean      nSectors = Int((iOffset + Len(sWrite) - 1) / BytesPerSector) + 1      abBuff = DirectReadDrive9x(sDrive, iStartSec, 0, nSectors * BytesPerSector)      ab = StrConv(sWrite, vbFromUnicode)      CopyMemory abBuff(iOffset), ab(0), Len(sWrite)      With dio          .dwStartSector = iStartSec          .wSectors = CInt(nSectors)          .dwBuffer = VarPtr(abBuff(0))      End With      ReDim abDioBuff(LenB(dio) - 1)      CopyMemory abDioBuff(0), dio, LenB(dio)      CopyMemory abDioBuff(6), abDioBuff(8), 4&      With reg         .reg_EAX = &H7305 'function number         .reg_ECX = -1&         .reg_EBX = VarPtr(abDioBuff(0))         .reg_EDX = Asc(UCase(sDrive)) - Asc("A") + 1         .reg_ESI = AreaCode      End With      hDevice = CreateFile("\\.\VWIN32", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      Dim i As Integer      For i = 0 To 3          If LockLogicalVolume(hDevice, Asc(UCase(sDrive)) - Asc("A") + 1, CByte(i), 0) Then             bLocked = True             Exit For          End If      Next i      If Not bLocked Then GoTo WriteError      DirectWriteDrive9x = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_DRIVEINFO, reg, Len(reg), reg, Len(reg), nRead, 0&) And Not (reg.reg_Flags And 1)      Call UnlockLogicalVolume(hDevice, Asc(UCase(sDrive)) - Asc("A") + 1)  WriteError:      CloseHandle hDevice  End Function     Private Function LockLogicalVolume(hVWin32 As Long, bDriveNum As Byte, bLockLevel As Byte, wPermissions As Integer) As Boolean      Dim fResult As Boolean      Dim reg As DIOC_REGISTER      Dim bDeviceCat As Byte ' can be either 0x48 or 0x08      Dim cb As Long  ' Try first with device category 0x48 for FAT32 volumes. If it  ' doesn 't work, try again with device category 0x08. If that  ' doesn 't work, then the lock failed.      bDeviceCat = CByte(&H48)  ATTEMPT_AGAIN:      reg.reg_EAX = &H440D&      reg.reg_EBX = MAKEWORD(bDriveNum, bLockLevel)      reg.reg_ECX = MAKEWORD(CByte(&H4A), bDeviceCat)      reg.reg_EDX = wPermissions      fResult = DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL, reg, LenB(reg), reg, LenB(reg), cb, ByVal 0&) And Not (reg.reg_Flags And 1)      If (fResult = False) And (bDeviceCat <> CByte(&H8)) Then          bDeviceCat = CByte(&H8)          GoTo ATTEMPT_AGAIN      End If      LockLogicalVolume = fResult  End Function     Private Function UnlockLogicalVolume(hVWin32 As Long, bDriveNum As Byte) As Boolean      Dim fResult As Boolean      Dim reg As DIOC_REGISTER      Dim bDeviceCat As Byte ' // can be either 0x48 or 0x08      Dim cb As Long  ' Try first with device category 0x48 for FAT32 volumes. If it  ' doesn 't work, try again with device category 0x08. If that  ' doesn 't work, then the unlock failed.      bDeviceCat = CByte(&H48)  ATTEMPT_AGAIN:      reg.reg_EAX = &H440D&      reg.reg_EBX = bDriveNum      reg.reg_ECX = MAKEWORD(CByte(&H6A), bDeviceCat)      fResult = DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL, reg, LenB(reg), reg, LenB(reg), cb, ByVal 0&) And Not (reg.reg_Flags And 1)      If (fResult = False) And (bDeviceCat <> CByte(&H8)) Then          bDeviceCat = CByte(&H8)          GoTo ATTEMPT_AGAIN      End If      UnlockLogicalVolume = fResult  End Function     '=============NT staff=============  'Read/Wrire drive with any file system     Private Function DirectReadDriveNT(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal cBytes As Long) As Variant      Dim hDevice As Long      Dim abBuff() As Byte      Dim abResult() As Byte      Dim nSectors As Long      Dim nRead As Long      nSectors = Int((iOffset + cBytes - 1) / BytesPerSector) + 1      hDevice = CreateFile("\\.\" & UCase(Left(sDrive, 1)) & ":", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      Call SetFilePointer(hDevice, iStartSec * BytesPerSector, 0, FILE_BEGIN)      ReDim abResult(cBytes - 1)      ReDim abBuff(nSectors * BytesPerSector - 1)      Call ReadFile(hDevice, abBuff(0), UBound(abBuff) + 1, nRead, 0&)      CloseHandle hDevice      CopyMemory abResult(0), abBuff(iOffset), cBytes      DirectReadDriveNT = abResult  End Function     Private Function DirectWriteDriveNT(ByVal sDrive As String, ByVal iStartSec As Long, ByVal iOffset As Long, ByVal sWrite As String) As Boolean      Dim hDevice As Long      Dim abBuff() As Byte      Dim ab() As Byte      Dim nRead As Long      Dim nSectors As Long      nSectors = Int((iOffset + Len(sWrite) - 1) / BytesPerSector) + 1      hDevice = CreateFile("\\.\" & UCase(Left(sDrive, 1)) & ":", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)      If hDevice = INVALID_HANDLE_VALUE Then Exit Function      abBuff = DirectReadDriveNT(sDrive, iStartSec, 0, nSectors * BytesPerSector)      ab = StrConv(sWrite, vbFromUnicode)      CopyMemory abBuff(iOffset), ab(0), Len(sWrite)      Call SetFilePointer(hDevice, iStartSec * BytesPerSector, 0, FILE_BEGIN)      Call LockFile(hDevice, LoWord(iStartSec * BytesPerSector), HiWord(iStartSec * BytesPerSector), LoWord(nSectors * BytesPerSector), HiWord(nSectors * BytesPerSector))      DirectWriteDriveNT = WriteFile(hDevice, abBuff(0), UBound(abBuff) + 1, nRead, 0&)      Call FlushFileBuffers(hDevice)      Call UnlockFile(hDevice, LoWord(iStartSec * BytesPerSector), HiWord(iStartSec * BytesPerSector), LoWord(nSectors * BytesPerSector), HiWord(nSectors * BytesPerSector))      CloseHandle hDevice  End Function     Function MAKEWORD(ByVal bLo As Byte, ByVal bHi As Byte) As Integer      If bHi And &H80 Then          MAKEWORD = (((bHi And &H7F) * 256) + bLo) Or &H8000      Else          MAKEWORD = (bHi * 256) + bLo      End If  End Function    僅供參考,歡迎繼續發言願以此功德 莊嚴佛淨土 上報四重恩 下濟三塗苦 若有見聞者 悉發菩提心 盡此一報身 同生極樂國
------
︿︿
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-08 12:42:06 IP:61.64.xxx.xxx 未訂閱

cmf 大仔 真是利害 非常利害

雖然不是delphi也是有據參考的價值 看來 L sir說的 ATA command int 13h 庵與你結梁仔了 真正是 頭痛 頭痛 頭痛 cmf 大仔 謝謝拉 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-08 16:39:29 IP:61.70.xxx.xxx 未訂閱
希望 有相關資料的人 能提供給 J SIR    书名: Delphi下深入Windows核心编程 附CD    内容简介             本书是一本介绍Windows核心技术及高级技巧的专著。从系统内核编程出发,使用大量的例子帮助读者理解这些编程技术,讲述了线程同步及隐藏、系统钩子深入分析、读写物理磁盘的关键技术、读写物理内存和其他进程内存的核心技术、Windows 9x下调用16位实模式和保护模式代码的核心技术、直接读写端口技术、可执行文件加壳的技巧、PE结构分析、Ring0的实现、Windows API截取技术、屏幕取词技术等方面的内容。全书对热点源代码进行了深入剖析和讲解,同时本书汇聚了作者利用Soft-ICE跟踪调试经验,作者多年的编程心得和技巧一览无遗。随书附送的光盘提供了书中涉及的程序源代码。     本书可对Windows核心编程感兴趣者提供帮助,亦可供广大编程人员及各大专院校师生参考。      近些年计算机软件的发展很快,从工具软件到管理软件都有很成熟的产品。软件系统的开发不但需要扎实的软件基础知识及团队合作精神,还需要对Windows 9x下调用16位实模式和保护模式代码的核心技术、直接读写端口技术、可执行文件加壳的技巧、PE结构分析、Ring0的实现、API截取技术、屏幕取词技术等方面的内容。 其中的屏幕取词技术是网络上许多BBS的热点话题,遗憾的是BBS上涉及到关键技术时都含糊其词。本书将介绍一个完整的屏幕取词程序(包括16位的Thunk关键技术,适用于Windows 9x下保护模式编程的一个技巧(漏洞),从Ring3跳到Ring0执行一些系统服务函数,做了一些“见不得人”的操作:用垃圾数据覆盖硬盘扇区、读写破坏BIOS芯片。CIH病毒源代码中有许多值得学习的地方,本书中的API、屏幕取词等技术。 全书分为10章,内容简介如下: 第1章DLL与数据共享,在Win32中通过使用内存映像文件、全局原子等实现多进程共享数据,这一章是基础,后面的很多章节都使用了本章介绍的数据共享技术。 第2章钩子原理,介绍了消息(包括键盘、鼠标消息)的截取、钩子的安装、DLL注入其他进程的方法等技术。这一章所介绍的内容是后面截取Windows内核有了一定的了解,介绍了进程的枚举、线程的同步、进程深度隐藏的种种方法及技巧、Windows 9x/NT/2000时间变速器的实现原理、16位与32位代码的核心接口技术等方面的内容。 第5章磁盘读写,分别提供了Windows的PE文件结构,并详细分析了其中每部分的含义,这是截取API Hook及屏幕取词,介绍了16位和32位API Hook技术、API Hook技术、Windows 9x的地方,都适用于Windows NT/2000的地方,都适用于Windows NT/2000下列举进程的方法 3.2.4 进程模块的列举 3.2.5 终止进程 3.2.6 创建进程并监视进程运行 3.3 进程隐藏深入剖析 3.3.1 进程隐藏原理 3.3.2 Windows NT/2000进程远程写入实现深度隐藏 3.4 线程 3.4.1 线程的优先级 3.4.2 线程的挂起和继续 3.4.3 执行线程 3.4.4 线程同步 3.4.5 列举本进程的所有线程 3.5 Windows 9x下的时间变速(变速齿轮) 4.4 端口读写驱动PortTalk 4.4.1 PortTalk与Delphi的接口 4.4.2 Windows 9x下读写逻辑磁盘扇区的方法 5.1.2 INT13实现读写软盘物理磁盘扇区 5.1.3 利用VxD和CIH病毒中的Ring0技术 5.1.4 调用16位实模式的核心技术 5.1.5 Windows 9x下读写物理内存的核心技术 9.5.1 编写VxD读写内存 9.5.2 利用16位DLL代码读写物理内存 9.6 API Hook及屏幕取词 10.1 API Hook入门 10.1.2 陷阱式API Hook 10.1.4 Windows NT/2000下32位取词及关键技术 10.2.2 Windows 9x下16位、32位取词及核心技术 附录A Delphi编译指令说明 A.1 使用编译设置对话框 A.2 使用编译指令 A.3 使用条件编译指令 附录B Delphi编译错误信息对照表 僅供參考,歡迎繼續發言願以此功德 莊嚴佛淨土 上報四重恩 下濟三塗苦 若有見聞者 悉發菩提心 盡此一報身 同生極樂國
------
︿︿
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-08 16:49:01 IP:61.66.xxx.xxx 未訂閱
呼~~`這本書看起『好像』很LiHi的樣子 有人看過嗎,分享一下吧,不過好像是對岸的書
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-08 17:05:41 IP:61.70.xxx.xxx 未訂閱
int13-21.zip 2434 02-13-93 Int13 is device driver which allows to see disk activity thru ports instead of int13h. http://www.filelibrary.com:8080/cgi-bin/freedownload/DOS/h/55/int13-21.zip
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-09 09:42:49 IP:61.218.xxx.xxx 未訂閱
在9x下直接訪問硬盤    在Windows9X中,由於內存和進程的保護,直接使用INT將會引起GPFs。在很多資料上都說要在windows中直接讀寫硬盤的方法只有使用VxD。這並不是真的,事實上使用windows9x公開的API就可以直接對硬盤進行操作。在microsoft programmer's guide to win95中,關於Device I/O Control中就有說明如何使用VWIN32呼叫MSDOS系統服務(磁盤訪問類)。定義了一下5個控制碼: VWIN32_DIOC_DOS_DRIVEINFO (6) INT 21h AX=730Xh,win95 osr2與以後版本提供的FAT32文件系統的訪問 VWIN32_DIOC_DOS_INT13 (4) BIOS INT13h VWIN32_DIOC_DOS_INT25 (2) DOS INT25h VWIN32_DIOC_DOS_INT26 (3) DOS INT26h VWIN32_DIOC_DOS_IOCTL (1) DOS設備I/O,(int 21h,ax=4400h到4411h) 使用方法如下: 使用 CreateFile("\\\\.\\vwin32",0,0,NULL,0,FILE_FLAG_DELETE_ON_CLOSE,NULL); 打開vwin32.vxd 根據調用的功能所用到的寄存器填充以下結構體: typedef struct _DIOC_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DIOC_REGISTERS, *PDIOC_REGISTERS; 使用 DeviceIoControl(hDevice,CONTROL_CODE,®,sizeof(reg),®,sizeof(reg), &dwBytesReturn,0); 調用MS-DOS的磁盤訪問功能。 最後調用 CloseHandle(hDevice);    確定硬盤空間      在安裝一些軟件時,我們會看來一些安裝程序會對你說你選的硬盤空間不夠,這種確定硬盤空間的程序是如何做到的呢?  GetDiskFreeSpace是一個返回一個磁盤大小、劃分、可用空間等信息的函數,我們可以用它來達到目的。  DWORD sectorspercluster ; DWORD bytespersector ; DWORD clusters ; DWORD freeclusters ; GetDiskFreeSpace (path.c_str (),§orspercluster,&bytespersector,&freeclusters,&clusters);    確定系統還有多少內存    大家都會想看看自己的內存還有多少,在一些工具中我們可以看到,如果我們自己來做要做些什麼才能實現呢?  WINDOWS的API函數GlobalMemoryStatus是用來得到當前內存情況的,如果我們想實時看到內存的變化情況就要配合TIMER來完成了。我們是把提取每次內存情況和顯示做成一個函數,只要在TIMER中設定一個你想要的調用週期,就可以達到目的了。下面是一個系統信息程序的一段,也就是關於內存的部分。  void TForm1::UpdateUsage () { MEMORYSTATUS memory ;    memory.dwLength = sizeof (memory) ; GlobalMemoryStatus (&memory) ;    ProgressBar1->Position = (float) memory.dwMemoryLoad ;    // Physical Memory Usage ProgressBar2->Position = 100.0 * (memory.dwTotalPhys - memory.dwAvailPhys) / (float) memory.dwTotalPhys ;    Label7->Caption = String ((int) (memory.dwTotalPhys / 1024)) + " K Total" ;    Label8->Caption = String ((int) (memory.dwAvailPhys / 1024)) + " K Free" ;    // Virtual Memory Usage ProgressBar3->Position = 100.0 * (memory.dwTotalVirtual - memory.dwAvailVirtual) / (float) memory.dwTotalVirtual ;    Label9->Caption = String ((int) (memory.dwTotalVirtual / 1048576.0)) + " MB Total" ;    Label10->Caption = String ((int) (memory.dwAvailVirtual / 1048576.0)) + " MB Free" ;    // Page File Usage ProgressBar4->Position = 100.0 * (memory.dwTotalPageFile - memory.dwAvailPageFile) / (float) memory.dwTotalPageFile ;    Label11->Caption = String ((int) (memory.dwTotalPageFile / 1048576.0)) + " MB Total" ;    Label12->Caption = String ((int) (memory.dwAvailPageFile / 1048576.0)) + " MB Free" ; }        僅供參考,歡迎繼續發言願以此功德 莊嚴佛淨土 上報四重恩 下濟三塗苦 若有見聞者 悉發菩提心 盡此一報身 同生極樂國
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-09 10:24:26 IP:61.218.xxx.xxx 未訂閱
INT_13h 所有功能涵數之解說如下: 1. AH=00 (重置磁碟系統) ┐ 2. AH=01 (取得磁碟狀態) │ 3. AH=02 (讀取磁區資料) │由於一般 DOS 書籍已有介 4. AH=03 (寫入磁區資料) │紹 ,故不再多談。 5. AH=04 (驗證磁區好壞) │ 6. AH=05 ( 格式化磁軌 ) ┘ 7. AH=06 格式化損壞的磁區 (PC/XT HD Only) AL=磁區數 CH=磁柱號碼 DH=磁頭 DL=磁碟機 (80h-FFh) 返回代碼 : 成功進位旗標為零 ,AH=00 失敗進位旗標為壹 ,AH=狀態 (參考AH=01) 8. AH=07 格式化磁碟機 (PC/XT HD Only) 同 AH=06 ,但會從指定之磁柱起開始格式化 9. AH=08 取得磁碟參數 (PC/AT PS/2) DL=磁碟機 (軟碟 00-7F ,硬碟 80-FF) 返回代碼 : 成功則進位碼被清除 BL=磁碟機種類 01 360 KB ,40軌 , 5.25吋 02 1.2 MB ,80軌 , 5.25吋 03 720 KB ,80軌 , 3.5 吋 04 1.44MB ,80軌 , 3.5 吋 CH & CL = 最大磁軌數之 "低.高位元" DH=磁頭數 DL=磁碟機數目 ES:DI 磁碟機參數表的 [分段:差距] 失敗 (同AH=07) 10 AH=09 (重設磁碟的特性) DL=磁碟機碼 (PC/AT PS/2 HD Only) INT_41h 需指向磁碟(HD)0的參數表 INT_46h 需指向磁碟(HD)1的參數表 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 11 AH=0A 0B (讀/寫延伸磁區 HD Only) AL=磁區數 CH=磁軌 CL=磁區 DH=磁頭 DL=磁碟機 (80h-FFh) ES:BX = 緩衝區 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 12. AH=0C (磁頭定位,但不讀寫資料) CX=磁軌編號 DH=磁頭 DL=磁碟機 (80h-FFh) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 13. AH=0D (同 AH=00 只是僅將 HD 磁頭拉到第0軌) AL=磁碟機代碼 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 14. AH=0E 0F(讀/寫磁碟控制卡上的資料) ES:BX 緩衝區 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 只是將卡上的 BUFFERS 資料讀出 & 寫入BUFFER ,並不會動磁碟機 15. AH=10 (TEST) DL=磁碟機 (80h-FFh HD Only) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 16. AH=11 (同 AH=00 只是僅將 HD 磁頭拉到第0軌) AL=磁碟機代碼 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 17. AH=12 (PC/XT HD CONTROL CARD RAM TEST) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 18. AH=13 (PC/XT HD CONTROL CARD TEST) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 19. AH=14 (PC/AT HD CONTROL CARD ALL TEST) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 20. AH=15 取得磁碟種類 DL=(軟碟00-7Fh ,硬碟80h-FFh) 返回代碼 : 成功 清除進位旗 AH=00 沒有磁碟 01 沒有支援變更列的軟碟 02 有支援變更列的軟碟 03 若是硬碟 ,CX:DX 長512位元組磁區數 失敗 AH=狀態 (參考書籍 AH=01) 21. AH=16 測試磁片是否抽換過 PC/AT Only DL=磁碟機 (00-7F) 返回代碼 : AH=00 未抽換 清除進位 AH=06 已抽換 設定進位 22. AH=17 設定磁碟種類 AL=00 未用 01 320/360KB 軟碟 (使用360KB驅動器) 02 320/360KB 軟碟 (使用1.2MB驅動器) 03 1.2MB 軟碟 (使用1.2MB驅動器) 04 720KB 軟碟 (使用720KB驅動器) DL=磁碟機 (00-7F) 返回代碼 : 成功 AH=00 ,清除進位 失敗 AH=狀態 (參考書籍 AH=01) 23. AH=18 設定儲存媒體種類 (略) 24. AH=19 PARK (PS/2 Only) DL=磁碟機 25. AH=1A FORMAT ESDI HD
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-09 10:31:32 IP:61.218.xxx.xxx 未訂閱
ASPIDEMO.ZIP http://vcl.vclxx.org/DELPHI/D32FREE/ASPIDEMO.ZIP WinASPI32.h 的 Object Pascal 宣告檔,範例程式示範如何利用 ASPI 取得 SCSI 硬碟的資訊 ( 1.0 版,附原始程式碼 ),作者 : Thomas Dammeier。
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-09 10:45:54 IP:61.218.xxx.xxx 未訂閱
在 开 发 应 用 程 序 时, 增 加 一 项 显 示 计 算 机 系 统 信 息 的 功 能, 例 如 已 安 装 的 软 盘、 硬 盘、 光 驱、 网 络 驱 动 器, 硬 盘 的 容 量 和 剩 余 空 间, 显 示 器 分 辨 率、 键 盘 类 型、 鼠 标 的 键 数, 内 存 大 小、CPU 类 型,Windows 的 版 本 号、 产 品 标 识、 注 册 用 户 单 位 名 和 用 户 名、 当 前 操 作 用 户 名 等( 见 运 行 图 示), 当 然 还 有 更 多 的 信 息, 这 样 会 使 你 的 程 序 更 友 好。 其 实, 有 很 多 应 用 程 序 就 是 这 样 做 的。 通 过 调 用Windows 的API 函 数 和 访 问Windows 注 册 表, 可 以 获 取 大 量 的 系 统 信 息。Delphi 为 绝 大 多 数Windows API 函 数 提 供 了 调 用 接 口( 可 参 见DELPHI3\SOURCE\RTL\WIN\windows.pas 文 件), 并 提 供 了 一 个 功 能 全 面 的TRegistry 类, 使 我 们 可 以 方 便 的 调 用Windows API 函 数 和 访 问 注 册 表, 例 如: 1、function GetDriveType(lpRootPathName: PChar): UINT; 返 回 指 定 驱 动 器 的 类 型。 2、function GetDiskFreeSpace(lpRootPathName: PChar; var lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters: DWORD): BOOL; 返 回 指 定 驱 动 器 的 总 簇 数、 剩 余 簇 数 及 每 簇 扇 区 数、 每 扇 区 字 节 数, 从 而 可 以 计 算 出 总 容 量 和 剩 余 空 间。 3、function GetSystemMetrics(SM_CXSCREEN或 SM_CYSCREEN): Integer; 返 回 显 示 器 分 辨 率。 4、function GetSystemMetrics(SM_CMOUSEBUTTONS): Integer; 返 回 鼠 标 的 按 键 数 目。 5、 在windows 注 册 表 的HKEY_LOCAL_MACHINE\ software\microsoft\windows\currentversion \RegisteredOwner 主 键 下 存 放 着Windows 安 装 时 输 入 的 用 户 名, 可 用 以 下 语 句 读 取。 myreg:=Tregistry.Create; file://必须在程序单元的uses部分加入Registry myreg.RootKey:=HKEY_LOCAL_MACHINE; if myreg.openkey('software\microsoft \windows\currentversion',false) then memo1.lines.add(' 注册用户名: ' myreg.readstring('RegisteredOwner')); myreg.closekey; 以 上 仅 举 几 例, 获 取 其 他 一 些 信 息 的 方 法 与 此 类 似, 详 见 源 程 序。 本 程 序 在Pwin95、Delphi3 下 调 试 通 过。 附: 源 程 序 清 单。 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i,x,y:integer; ch:char; file://驱动器字符'A'~'Z' buffer:string; cpuinfo:TSYSTEMINFO; file://存放系统信息的记录类型,在Windows.pas中查到详细内容。 meminfo:TMemoryStatus; file://存放系统内存信息的记录类型。 computername,username:pchar; file://计算机名称、用户名 spc,bps,nofc,tnoc:longint; file://用于存放磁盘容量的变量 myreg:Tregistry; file://用于访问注册表的TRegistry变量 begin memo1.Lines.Clear; for ch:='A' to 'Z' do begin i:=getdrivetype(pchar(ch ':\')); buffer:=' ' ch ': '; case i of DRIVE_UNKNOWN : buffer:=buffer '未知类型'; DRIVE_REMOVABLE: buffer:=buffer '软盘'; DRIVE_FIXED : begin buffer:=buffer '硬盘'; if getdiskfreespace(pchar(ch ':\'),spc,bps,nofc,tnoc) then begin buffer:=buffer '总容量: ' inttostr((spc*bps*tnoc) div (1024*1024)) 'MB'; buffer:=buffer '剩余: ' inttostr((spc*bps*nofc) div (1024*1024)) 'MB'; end; end; DRIVE_REMOTE : buffer:=buffer '网络驱动器'; DRIVE_CDROM :buffer:=buffer 'CD-ROM驱动器'; DRIVE_RAMDISK:buffer:=buffer 'RAM虚拟驱动器'; end; if (ch >'D') and (i=1) then break; if i< >1 then memo1.Lines.Add(buffer); end; case getkeyboardtype(0) of file://获取键盘类型 1: buffer:=' 键盘: IBM PC/XT或兼容类型(83键)'; 2: buffer:=' 键盘: Olivetti "ICO"(102键)'; 3: buffer:=' 键盘: IBM PC/AT(84键)'; 4: buffer:=' 键盘: IBM增强型(101或102键)'; 5: buffer:=' 键盘: Nokia 1050'; 6: buffer:=' 键盘: Nokia 9140'; 7: buffer:=' 键盘: Japanese'; end; memo1.lines.add(buffer); file://获取键盘功能键数目 memo1.lines.add(' 功能键数目: ' inttostr(getkeyboardtype(2))); memo1.Lines.add('显示器分辨率: ' inttostr(getsystemmetrics(SM_CXSCREEN)) 'x' inttostr(getsystemmetrics(SM_CYSCREEN))); file://获取鼠标按键数目 memo1.Lines.add(' 鼠标: ' inttostr(getsystemmetrics(SM_CMOUSEBUTTONS)) '键'); globalmemorystatus(meminfo); file://获取系统内存数量 memo1.lines.add(' 物理内存: ' inttostr(meminfo.dwTotalPhys div 1024) ' KB'); i:=getsystemmetrics(SM_CLEANBOOT); case i of 0:buffer:='系统启动模式:正常模式'; 1:buffer:='系统启动模式:保护模式'; 2:buffer:='系统启动模式:网络保护模式'; end; memo1.lines.add(buffer); x:=getsystemmetrics(SM_ARRANGE); file://获取系统最小化窗口的起始位置和排列方式 y:=x; x:=x and 3; y:=y and 12; case x of ARW_BOTTOMLEFT : buffer:=' 最小化窗口:自左下角'; ARW_BOTTOMRIGHT : buffer:=' 最小化窗口:自右下角'; ARW_TOPLEFT : buffer:=' 最小化窗口:自左上角'; ARW_TOPRIGHT : buffer:=' 最小化窗口:自右上角'; end; case y of ARW_LEFT : buffer:=buffer '横向排列'; ARW_UP : buffer:=buffer '纵向排列'; ARW_HIDE : buffer:=buffer '隐藏'; end; memo1.lines.add(buffer); getmem(computername,255); file://获取计算机名称和用户名 getmem(username,255); i:=255; getcomputername(computername,i); memo1.lines.add(' 计算机名称: ' computername); getusername(username,i); memo1.lines.add(' 用户名: ' username); freemem(computername); freemem(username); getsysteminfo(cpuinfo); file://获取CPU类型 case cpuinfo.dwProcessorType of 386 : buffer:=' CPU类型: 386'; 486 : buffer:=' CPU类型: 486'; 586 : buffer:=' CPU类型: Pentium'; end; memo1.Lines.add(buffer); file://从注册表中获取CPU标识,Windows版本, 产品标识,注册单位名称及用户名 myreg:=Tregistry.Create; myreg.RootKey:=HKEY_LOCAL_MACHINE; if myreg.OpenKey('hardware\descriptionsystem\centralprocessor\0',false) then memo1.lines.add(' CPU标识: ' myreg.ReadString('VendorIdentifier')); myreg.closekey; if myreg.openkey('software\microsoft\ windows\currentversion',false) then begin memo1.lines.add(' windows版本: ' myreg.ReadString('Version')); memo1.lines.add(' 版本号: ' myreg.ReadString('VersionNumber') ' ' myreg.ReadString('Subversionnumber')); memo1.lines.add(' 产品标识: ' myreg.Readstring('ProductID')); memo1.lines.add('注册单位名称: ' myreg.readstring('RegisteredOrganization')); memo1.lines.add(' 注册用户名: ' myreg.readstring('RegisteredOwner')); end; myreg.CloseKey; myreg.Free; end; end
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-09 12:01:49 IP:61.218.xxx.xxx 未訂閱
J SIR 這篇要詳細看喔^_^    <iframe width=800 height=800 src="http://www.microsoft.com/msj/0398/driver.aspx"></iframe> 發表人 - cmf 於 2003/06/09 12:02:49
------
︿︿
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-09 13:21:15 IP:61.221.xxx.xxx 未訂閱
c sir 大仔 真正是利害    msdn這東西 庵最不喜歡找 你居然找到 真正是 天下無敵    好好 收藏 哈哈< > 不知 ><>五體投地 佩服佩服< > ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-10 12:14:34 IP:61.231.xxx.xxx 未訂閱
引言: 庵 手上還有一隻 8051 的exe他應該不是ddk喔 連硬碟的快取 馬達轉數都有數據
天呀! j sir 我被您給騙了 您的那個 >沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-10 12:22:37 IP:61.221.xxx.xxx 未訂閱
dellee 庵也是前幾天自己由txt下去看才知道  庵被騙了  哈哈    不愧你為 

嵌入之王

哈哈 不過 庵有想個另一個方式 哈哈 就是dos 下送enter 來防止windows中斷 你知道庵 說的方式嗎? 討論討論 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-12 13:40:23 IP:211.23.xxx.xxx 未訂閱
補一下花:    方向是很重要, 但是要正確:    Jackkcg, 你問的不是RAID CARD上接的HDD 容量讀法嗎?  <--- 重點沒給人家寫出來唷 > 對了, > 發表人 -
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-12 14:00:33 IP:61.63.xxx.xxx 未訂閱
lcsboy 哈哈 Jackkcg, 你問的不是RAID CARD上接的HDD 容量讀法嗎? <--- 重點沒給人家寫出來唷 庵 本想說要寫讀要RAID已經是 難了 你還加上 RAID 各種類 真正是 難上難 不愧為 bcb 的第一把 交椅 哈哈 倚天既出 屠龍未現 哈哈 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-06-13 09:24:45 IP:218.85.xxx.xxx 未訂閱
引言: 呼~~`這本書看起『好像』很LiHi的樣子 有人看過嗎,分享一下吧,不過好像是對岸的書 < face="Verdana, Arial, Helvetica"> 我手頭上有這本書,硬碟讀寫的示例程式已上傳至: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32291 包括: Windows 9x下讀寫邏輯磁區的方法 Windows 9x下讀寫物理磁區——Ring0技術 Windows 9x下讀寫物理磁區——僅限軟碟 Windows 9x下讀寫物理磁區——實模式 Windows NT2000下讀寫物理邏輯磁區 讀寫磁片中打開的所有檔 如果需要原書的話我可以郵寄一本給你。 另外我不知道把書上面的程式放上來是否有所不妥, 不對的話jackkcg站長可在下載後一起刪除上面的帖子。
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-06-13 10:23:06 IP:61.221.xxx.xxx 未訂閱
Rain 兄 無法進入你說的連結位置 如果需要原書的話我可以郵寄一本給你。 另外我不知道把書上面的程式放上來是否有所不妥, 不對的話jackkcg站長可在下載後一起刪除上面的帖子 你說的是 cmf 介紹的那本阿 多謝你的好意 至於是否 合法 我想應該看原作者內容把 我也沒看到 所以只有請你自己先看看原程式作者的宣告判斷把 謝謝 你的熱心幫忙 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-06-13 11:34:15 IP:218.85.xxx.xxx 未訂閱
示例程式是在隨書附贈光碟中的,在原書中只有關於書的版權說明, 另外在出版商的網站有提供大部分書籍的源代碼、常式下載: http://www.fecit.com.cn/Pages/Guest.DD.L.P.asp, 只是還沒有這本書的(可能是因為新出不久的原因,不然我直接給 個位址就好),所以就姑且認為可以把它放上來,我再發個郵件 問一下,不行的話你再把它刪掉吧,另外剛才我是把文件放在會員個人專區上的 ,這個區域是否只有我本人才可以訪問?我在會員分享文檔上傳區貼了一個,可以在那邊下載:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32307。
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-06-13 12:58:49 IP:61.221.xxx.xxx 未訂閱
Rain 大仔的個人風範 實在應為 China 的標榜 本人除了 感謝 Rain的熱心幫忙 也對你的 個人處事風格 有信心 哈哈 至於 源碼部份 庵會通知 天使 評鑑一下是否可以 公開上傳 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-06-13 13:48:14 IP:192.168.xxx.xxx 未訂閱
引言: 另外我不知道把書上面的程式放上來是否有所不妥, 不對的話jackkcg站長可在下載後一起刪除上面的帖子。
感謝Rain的熱心, 但是原出版社若未開放此書程式碼下載就不方便公開, 或許是原作者不想開放, 所以我先刪除了! 不好意思! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
ufjjc
一般會員


發表:18
回覆:47
積分:23
註冊:2002-05-21

發送簡訊給我
#22 引用回覆 回覆 發表時間:2010-06-06 22:47:56 IP:114.33.xxx.xxx 訂閱
http://ftp.sunet.se/delphi/ftp/d30free/http://ftp.sunet.se/delphi/ftp/d30free/INDEX

系統時間:2024-04-24 17:08:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!