news 2026/2/7 4:48:13

关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

第一部分:时间上在前。

https://chenghao.blog.csdn.net/article/details/157065028
处理节点BAT1的时候回调用ACPI!GetOpRegionScope
1: kd> kc
#
00 ACPI!AsyncEvalObject
01 ACPI!AMLIAsyncEvalObject
02 ACPI!ACPIGet
03 ACPI!IsPciDeviceWorker
04 ACPI!IsPciDevice
05 ACPI!GetOpRegionScopeWorker
06 ACPI!GetOpRegionScope
07 ACPI!PciConfigSpaceHandlerWorker

08 ACPI!PciConfigSpaceHandler
09 ACPI!InternalOpRegionHandler
0a ACPI!WriteCookAccess
0b ACPI!RunContext
0c ACPI!InsertReadyQueue
0d ACPI!RestartCtxtPassive
0e ACPI!ACPIWorker
0f nt!PspSystemThreadStartup
10 nt!KiThreadStartup


NTSTATUS
EXPORT
PciConfigSpaceHandlerWorker(
IN PNSOBJ AcpiObject,
IN NTSTATUS CompletionStatus,
IN POBJDATA Result,
IN PVOID Context
)
{

if (!state->OpRegion->Context) {

if (!(state->Flags & PCISUPP_GOT_SCOPE)) {

state->Flags |= PCISUPP_GOT_SCOPE;

status = GetOpRegionScope(state->OpRegion,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&((PNSOBJ)(state->OpRegion->Context)));

if (status == STATUS_PENDING) {
return status;
}

if (!NT_SUCCESS(status)) {
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}
}
}

第二部分:时间上在后。


处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!


1: kd> kc
#
00 ACPI!GetPciAddress
01 ACPI!PciConfigSpaceHandlerWorker

02 ACPI!PciConfigSpaceHandler
03 ACPI!InternalOpRegionHandler
04 ACPI!WriteCookAccess
05 ACPI!RunContext
06 ACPI!InsertReadyQueue
07 ACPI!RestartCtxtPassive
08 ACPI!ACPIWorker
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup

NTSTATUS
EXPORT
PciConfigSpaceHandlerWorker(
IN PNSOBJ AcpiObject,
IN NTSTATUS CompletionStatus,
IN POBJDATA Result,
IN PVOID Context
)
{

//
// If we have not seen this OpRegion before, we need to
// fill in the dwContext with the PNSOBJ of the
// PCI device which the OpRegion relates to.
//

if (!state->OpRegion->Context) {

if (!(state->Flags & PCISUPP_GOT_SCOPE)) {

state->Flags |= PCISUPP_GOT_SCOPE;

status = GetOpRegionScope(state->OpRegion,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&((PNSOBJ)(state->OpRegion->Context)));

if (status == STATUS_PENDING) {
return status;
}

if (!NT_SUCCESS(status)) {
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}
}
}

//
// Identify the PCI device, that device's extension,
// and the pointer to the interface within the PCI
// driver that does PCI config space reads and writes.
//

state->PciObj = (PNSOBJ)state->OpRegion->Context;

pciDeviceFilter = (PDEVICE_EXTENSION)state->PciObj->Context;

if (pciDeviceFilter == NULL) {

//
// The device has not been initialized yet, we cannot perform
// PCI config cycles to it. Fail gracefully and return all 0xFF
//
bytes = 0;
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}

ASSERT(pciDeviceFilter);

interface = pciDeviceFilter->Filter.Interface;

ASSERT(interface ? (interface->Size == sizeof(BUS_INTERFACE_STANDARD)) : TRUE);

//
// If interface is non-zero, we have enumerated this PCI
// device. So use the PCI driver to do config ops.
// If it is zero, make some attempt to figure out what
// device this request is for. The result will be
// used in calls to the HAL.
//

if (!interface) {

if (!(state->Flags & PCISUPP_GOT_SLOT_INFO)) {

state->Flags |= PCISUPP_GOT_SLOT_INFO;

status = GetPciAddress(state->PciObj,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&state->Bus,
&state->Slot);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 3:19:33

人工智能之核心基础 机器学习 第十八章 经典实战项目

人工智能之核心基础 机器学习 第十八章 经典实战项目 文章目录人工智能之核心基础 机器学习18.1 入门项目1:房价预测(回归任务)🎯 任务目标📦 数据集:California Housing(Scikit-learn内置&…

作者头像 李华
网站建设 2026/2/3 12:57:43

系统出现msacm32.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/2/4 5:56:07

德国 EPR 做错了怎么办?还能改吗?

很多卖家真正开始慌, 不是因为“没做德国 EPR”, 而是这一句: 我已经做了德国 EPR, 但好像做错了,还能改吗? 如果你也有这个担心,这篇一定要看完。 大多数德国 EPR“做错”的情况&#xf…

作者头像 李华