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

txtsetup.sif文件SetupData节DisableAsr的值和setupldr!SlCheckASRKeypress函数的关系和检测F2键进入ASR

txtsetup.sif文件SetupData节DisableAsr的值和setupldr!SlCheckASRKeypress函数的关系和检测F2键进入ASR


SlCheckOemKeypress(OemKeypressTimeout);

{
PCSTR szOptionsToAdd = NULL;
CHAR szOptionsToRemove[sizeof("/noguiboot/nodebug")];
szOptionsToRemove[0] = 0;

//
// If F8 was pressed, add the debug options
//
if(EnableDebugger) {
if(InfFile != NULL) {
szOptionsToAdd = SlGetSectionKeyIndex(InfFile, "SetupData", "SetupDebugOptions", 0);
}

if(NULL == szOptionsToAdd) {
szOptionsToAdd = "/debug";
}

strcat(szOptionsToRemove, "/nodebug");
}

kd> x setupldr!EnableDebugger
00348b08 setupldr!EnableDebugger = 0x00 ''

kd> dv setupldr!IsUpgrade
setupldr!IsUpgrade = 0x00 ''

if (IsUpgrade) {
strcat(szOptionsToRemove, "/noguiboot");
}


//
// We need to check to see if the user pressed any keys to force loading,
// an ASR pnp repair disk. Only do this if the user didn't select
// anything in the SlCheckOemKeypress function.
//
if(!UseCommandConsole && !WinPEBoot && !IsUpgrade && !BlBootingFromNet) {

PCHAR pTmp;

pTmp = SlGetSectionKeyIndex(InfFile,
"SetupData",
"DisableAsr",
0);

if ((pTmp == NULL) || (atoi(pTmp) == 0)) {

SlCheckASRKeypress();
}
}


txtsetup.sif文件部分内容:
[SetupData]

SetupSourcePath = "\"
MajorVersion = 5
MinorVersion = 2
DefaultPath=\WINDOWS


SetupDebugOptions = "/debug"

OsLoadOptions = "/fastdetect /noguiboot /nodebug"

ForceScsi = 1
ForceDiskClass = 1
ForceCDRom = 1

Architecture = i386

DriverCabName=driver.cab

ProductType = 1
LoadIdentifier = %srv_id%
BaseVideoLoadId = %srv_id_vga%

RequiredMemory = 134217728

Pagefile = 120,250

kd> kc
#
00 setupldr!SlGetSectionKeyIndex
01 setupldr!SlInit
02 setupldr!BlStartup
03 setupldr!NtProcessStartup
WARNING: Frame IP not in any known module. Following frames may be wrong.
04 0x0
05 0x0
06 0x0

kd> dv
INFHandle = 0x8007b0d8
SectionName = 0x003255d0 "SetupData"
Key = 0x003255c4 "DisableAsr"
ValueIndex = 0

kd> db 0x8007b0d8
8007b0d8 b0 a8 21 80 00 00 00 00-56 65 72 73 69 6f 6e 00 ..!.....Version.
8007b0e8 73 69 67 6e 61 74 75 72-65 00 43 6c 61 73 73 47 signature.ClassG
8007b0f8 55 49 44 00 7b 30 30 30-30 30 30 30 30 2d 30 30 UID.{00000000-00
8007b108 30 30 2d 30 30 30 30 2d-30 30 30 30 2d 30 30 30 00-0000-0000-000
8007b118 30 30 30 30 30 30 30 30-30 7d 00 53 6f 75 72 63 000000000}.Sourc
8007b128 65 44 69 73 6b 73 4e 61-6d 65 73 00 5f 78 00 25 eDisksNames._x.%
8007b138 63 64 6e 61 6d 65 25 00-25 63 64 74 61 67 66 69 cdname%.%cdtagfi
8007b148 6c 65 25 00 5f 31 00 25-63 64 6e 61 6d 65 25 00 le%._1.%cdname%.

kd> gu
eax=00000000 ebx=00000000 ecx=003255c4 edx=00000048 esi=00000000 edi=003482a3
eip=00327288 esp=00060bc0 ebp=00060df4 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000046
setupldr!SlInit+0x1242:
00327288 3bc3 cmp eax,ebx

kd> kc 5
#
00 setupldr!SlCheckASRKeypress
01 setupldr!SlInit
02 setupldr!BlStartup
03 setupldr!NtProcessStartup
WARNING: Frame IP not in any known module. Following frames may be wrong.
04 0x0
kd> dv
FloppyId = 0x60df4
FirstTry = 0x00 ''
c = 0x32397c
FloppyName = char [80] "???"
ASRPNPSifHandle = 0x00000000
FileName = char [128] ""
Done = 0x00 ''
PromptASR = 0x00 ''

if (FirstTry) {
StatusText = BlFindMessage(SL_MSG_PRESS_ASR);
FirstTry = FALSE;
}
else {
StatusText = BlFindMessage(SL_MSG_PREPARING_ASR);
}


if (FirstTry) {
StatusText = BlFindMessage(SL_MSG_PRESS_ASR);
kd> p
eax=00384508 ebx=00000000 ecx=00382420 edx=00384504 esi=00000000 edi=003482a3
eip=003239c2 esp=00060acc ebp=00060bb8 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000046
setupldr!SlCheckASRKeypress+0x46:
003239c2 885dfd mov byte ptr [ebp-3],bl ss:0010:00060bb5=01
kd> db 00384508
00384508 50 72 65 73 73 20 46 32-20 74 6f 20 72 75 6e 20 Press F2 to run
00384518 41 75 74 6f 6d 61 74 65-64 20 53 79 73 74 65 6d Automated System
00384528 20 52 65 63 6f 76 65 72-79 20 28 41 53 52 29 2e Recovery (ASR).
00384538 2e 2e 0d 0a 00 00 00 00-b4 00 00 00 20 20 20 20 ............

if( StatusText != NULL ) {
SlWriteStatusText(StatusText);
}


Press F2 to run Automated System Recovery (ASR)...

do {
if(ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
//
// There is a key pending, so see what it is.
//
c = SlGetChar();

switch(c) {

case SL_KEY_F2: // Force ASR prompt
PromptASR = TRUE;
Done = TRUE;
break;

case ASCI_ESC:
PromptASR = FALSE;
Done = TRUE;
break;
}
}

} while( !Done && (EndTime > ArcGetRelativeTime()) );


kd> g
Breakpoint 9 hit
eax=00013665 ebx=00000000 ecx=000000b6 edx=00000008 esi=00013665 edi=003482a3
eip=00329dfa esp=00060ac4 ebp=00060bb8 iopl=0 nv up di pl zr na pe nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000046
setupldr!SlWriteStatusText:
00329dfa 55 push ebp
kd> dv
Text = 0x00323966 ""
AttributeSave = 0xfa ''
Count = 8


kd> dv PromptASR
PromptASR = 0x00 ''

5秒钟的时间内检测到按键F2PromptASR = TRUE

没有检测到按键F2或检测到按键ESC则PromptASR = FALSE。

http://www.jsqmd.com/news/378599/

相关文章:

  • 基于微信小程序的工厂生产流程与库存管理一体化系统
  • 2026年口碑好的工业制冷压缩机/国产制冷压缩机实用公司采购参考怎么联系 - 品牌宣传支持者
  • 分析京津冀轮胎专业制造商总代理,如何选择合适的? - 工业设备
  • 闭眼入!千笔·专业降AIGC智能体,碾压级的降AI率网站
  • AgentScope和LangGraph协同开发
  • 2026年北京别墅装修设计十大品牌费用如何,为你分析 - 工业品网
  • 基于微信小程序的高校设备报修系统
  • 一个提前预知期刊编辑意见的方法
  • Rust中 引用类型 VS 裸指针
  • 2026年质量好的坐骑式割草机/草坪割草机生产商推荐怎么选(可靠) - 品牌宣传支持者
  • Python Any类型注解(Ptyhon typing.Any、Python类型提示、万能类型提示、typing模块、Any陷阱、# type: ignore)
  • 青椒三年期间养成的六个科研习惯
  • 应用游击战术于家庭子女教育的作业辅导问题
  • 2026年比较好的特种纸印刷/特种纸包装生产厂家采购指南帮我推荐几家 - 品牌宣传支持者
  • 微信小程序登录+支付
  • 加油卡闲置不用?靠谱回收平台让你快速提现! - 团团收购物卡回收
  • 研究生真的没必要害怕导师
  • Cursor开发智能体demo初体验
  • 预训练目标的统一性框架:从对比学习到生成式建模的理论收敛
  • 总结2026年值得推荐的定制实木托盘供应商,价格怎么算 - 工业品牌热点
  • 2026年比较好的人造丝金丝绒/加密金丝绒制造厂家选购指南怎么选(精选) - 品牌宣传支持者
  • 2026年比较好的IXPE泡棉/泡棉如何选生产商推荐(精选) - 品牌宣传支持者
  • git 的基本操作
  • 分析便携式打印机选购要点,新手适合用哪个品牌 - myqiye
  • 少走弯路:8个AI论文网站深度测评,研究生毕业论文写作必备工具推荐
  • 【AAAI 2026即插即用】注意力模块篇 | PSSA脉冲自注意力模块,适合图像分类、目标检测、图像去噪、图像恢复、暗光增强、神经形态视觉 / 事件相机处理、语义分割等CV任务通用,涨点起飞
  • 必读!支付宝立减金回收与使用的注意事项全解析 - 团团收购物卡回收
  • 在线动图加字怎么加?浏览器打开即用,高清不丢帧
  • 别再瞎找了!一键生成论文工具 千笔AI VS 灵感风暴AI,自考写论文更省心!
  • 本土资深服务商:洛可可设计(创新设计 + 品牌赋能)