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

atapi!IdeReadWrite函数分析中.txt


第一部分:

    if (deviceExtension->DeviceFlags[Srb->TargetId] & DFLAGS_LBA) {

        SelectIdeDevice(baseIoAddress1,
                        Srb->TargetId,
                        (IDE_LBA_MODE | ((startingSector & 0x0f000000) >> 24)));

        IdePortOutPortByte (
                           baseIoAddress1->BlockNumber,
                           (UCHAR) ((startingSector & 0x000000ff) >> 0));
        IdePortOutPortByte (
                           baseIoAddress1->CylinderLow,
                           (UCHAR) ((startingSector & 0x0000ff00) >> 8));

        IdePortOutPortByte (
                           baseIoAddress1->CylinderHigh,
                           (UCHAR) ((startingSector & 0x00ff0000) >> 16));


第二部分:
//
// Device selection constants used for programming the device/head register.
//
#define IDE_LBA_MODE        0xE0


cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f6
        mov     al,[esp+8]              ; (al) = Value        eax=800000e0
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR


0: kd> p
eax=800000e0 ebx=804f4d68 ecx=000000e0 edx=000001f6 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000282
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

第三部分:

        IdePortOutPortByte (
                           baseIoAddress1->BlockNumber,
                           (UCHAR) ((startingSector & 0x000000ff) >> 0));


cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f3
        mov     al,[esp+8]              ; (al) = Value        eax=8000003f
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR

0: kd> p
eax=8000003f ebx=804f4d68 ecx=000000e0 edx=000001f3 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000282
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al


第四部分:

        IdePortOutPortByte (
                           baseIoAddress1->CylinderLow,
                           (UCHAR) ((startingSector & 0x0000ff00) >> 8));

cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f4
        mov     al,[esp+8]              ; (al) = Value        eax=00006000
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

stdENDP _WRITE_PORT_UCHAR

0: kd> p
eax=00006000 ebx=804f4d68 ecx=000000e0 edx=000001f4 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000206
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

第五部分:

        IdePortOutPortByte (
                           baseIoAddress1->CylinderHigh,
                           (UCHAR) ((startingSector & 0x00ff0000) >> 16));

cPublicProc _WRITE_PORT_UCHAR ,2
cPublicFpo 2, 0

        mov     edx,[esp+4]             ; (dx) = Port        edx=000001f5
        mov     al,[esp+8]              ; (al) = Value        eax=00000060
        out     dx,al
        stdRET    _WRITE_PORT_UCHAR

0: kd> p
eax=00000060 ebx=804f4d68 ecx=000000e0 edx=000001f5 esi=895e98a8 edi=89529734
eip=804f4d70 esp=f78d5eec ebp=f78d5f0c iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00000206
hal!WRITE_PORT_UCHAR+0x8:
804f4d70 ee              out     dx,al

http://www.dtcms.com/a/224680.html

相关文章:

  • LeeCode 98. 验证二叉搜索树
  • LearnOpenGL-笔记-其十二
  • oscp练习PG Monster靶机复现
  • C# 如何获取当前成员函数的函数名
  • Kerberos面试内容整理-Kerberos 与 LDAP/Active Directory 的集成
  • C++哈希表:unordered系列容器详解
  • 2.5/Q2,Charls最新文章解读
  • 动态规划-376.摆动序列-力扣(LeetCode)
  • 使用HTTPS进行传输加密
  • WIN11+eclipse搭建java开发环境
  • Codesys FOR 循环之轴控
  • AIGC学习笔记(8)——AI大模型开发工程师
  • AI读懂天书:Manus AI跨语种手写识别解密
  • 【Python】解析 io.StringIO 与 io.BytesIO
  • Kafka 的 ISR 机制深度解析:保障数据可靠性的核心防线
  • Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作
  • CloudCompare-源码分析-绘制与 3D 场景分离的“前景”元素
  • Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路
  • 澄清 STM32 NVIC 中断优先级
  • simulink mask的使用技巧
  • SQL进阶之旅 Day 9:高级索引策略
  • C++ 命令模式:设计与实现详解
  • SOC-ESP32S3部分:22-分区表
  • AutoML详解:自动化机器学习的未来
  • GitHub 汉化插件,GitHub 中文化界面安装全教程
  • Git -> Git Stash临时保存当前工程分支修改
  • 计算机组成原理第5章 中央处理器 (CPU)(竟成)
  • LG P4119 [Ynoi2018] 未来日记 Solution
  • Spring Boot 自动参数校验
  • Mistral 推出全新开发者平台Agents API