news 2026/4/23 6:23:26

nt!PiQueryResourceRequirements函数分析写入注册表LOGCONF下的BasicConfigVector和赋值DeviceNode->ResourceRequirements

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nt!PiQueryResourceRequirements函数分析写入注册表LOGCONF下的BasicConfigVector和赋值DeviceNode->ResourceRequirements

nt!PiQueryResourceRequirements函数分析写入注册表LOGCONF下的BasicConfigVector和赋值DeviceNode->ResourceRequirements

//
// Remember the resource list
//
Irp->IoStatus.Information = (ULONG_PTR)
( NT_SUCCESS(status) ? resList : NULL );

0: kd> dv
DeviceObject = 0x00000000
Irp = 0x89905220
prsBuf = 0x00000000 ""
minorFunction = 0x0b ''
prsBufSize = 0x8990520b
crsBuf = 0xe129e370 "???"
crsStat = 0n0
resList = 0x899bf758
crsBufSize = 0x1e5
0: kd> dx -r1 ((ACPI!_IRP *)0x89905220)
((ACPI!_IRP *)0x89905220) : 0x89905220 [Type: _IRP *]
[<Raw View>] [Type: _IRP]
IoStack : Size = 1, Current IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS for Device for "\Driver\ACPI"
CurrentThread : 0x899a1020 [Type: _ETHREAD *]
0: kd> dx -r1 -nv (*((ACPI!_IRP *)0x89905220))
(*((ACPI!_IRP *)0x89905220)) [Type: _IRP]
[+0x000] Type : 6 [Type: short]
[+0x002] Size : 0x94 [Type: unsigned short]
[+0x004] MdlAddress : 0x0 [Type: _MDL *]
[+0x008] Flags : 0x0 [Type: unsigned long]
[+0x00c] AssociatedIrp [Type: __unnamed]
[+0x010] ThreadListEntry [Type: _LIST_ENTRY]
[+0x018] IoStatus [Type: _IO_STATUS_BLOCK]
[+0x020] RequestorMode : 0 [Type: char]
[+0x021] PendingReturned : 0x0 [Type: unsigned char]
[+0x022] StackCount : 1 [Type: char]
[+0x023] CurrentLocation : 1 [Type: char]
[+0x024] Cancel : 0x0 [Type: unsigned char]
[+0x025] CancelIrql : 0x0 [Type: unsigned char]
[+0x026] ApcEnvironment : 0 [Type: char]
[+0x027] AllocationFlags : 0x4 [Type: unsigned char]
[+0x028] UserIosb : 0xf789a258 [Type: _IO_STATUS_BLOCK *]
[+0x02c] UserEvent : 0xf789a248 [Type: _KEVENT *]
[+0x030] Overlay [Type: __unnamed]
[+0x038] CancelRoutine : 0x0 [Type: void (*)(_DEVICE_OBJECT *,_IRP *)]
[+0x03c] UserBuffer : 0x0 [Type: void *]
[+0x040] Tail [Type: __unnamed]
0: kd> dx -r1 (*((ACPI!_IO_STATUS_BLOCK *)0x89905238))
(*((ACPI!_IO_STATUS_BLOCK *)0x89905238)) [Type: _IO_STATUS_BLOCK]
[+0x000] Status : -1073741637 [Type: long]
[+0x000] Pointer : 0xc00000bb [Type: void *]
[+0x004] Information : 0x899bf758 [Type: unsigned long]
0: kd> dd 0x899bf758
899bf758 00000468 0000000f 00000000 00000000
899bf768 00000000 00000000 00000000 00000001
899bf778 00010001 00000022 00030600 00000000
899bf788 00000080 00000000 0000007f 00000000
899bf798 00000000 00000000 00038100 00000000
899bf7a8 00000080 00000000 0000007f 00000000
899bf7b8 00000000 00000000 00030300 00000020
899bf7c8 00020000 00000001 000a0000 00000000

0: kd> dt IO_RESOURCE_REQUIREMENTS_LIST 0x899bf758
nt!IO_RESOURCE_REQUIREMENTS_LIST
+0x000 ListSize : 0x468
+0x004 InterfaceType : f ( PNPBus )
+0x008 BusNumber : 0
+0x00c SlotNumber : 0
+0x010 Reserved : [3] 0
+0x01c AlternativeLists : 1
+0x020 List : [1] _IO_RESOURCE_LIST
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0x899bf778))
(*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0x899bf778)) [Type: _IO_RESOURCE_LIST [1]]
[0] [Type: _IO_RESOURCE_LIST]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST *)0x899bf778))
(*((ntkrnlmp!_IO_RESOURCE_LIST *)0x899bf778)) [Type: _IO_RESOURCE_LIST]
[<Raw View>] [Type: _IO_RESOURCE_LIST]
[0] : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[1] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[2] : Memory Resource: 0xa0000 - 0xbffff of length 0x20000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[3] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[4] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[5] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[6] : Memory Resource: 0xcc000 - 0xcffff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[7] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[8] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[9] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[10] : Memory Resource: 0xd0000 - 0xd3fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[11] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[12] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[13] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[14] : Memory Resource: 0xd4000 - 0xd7fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[15] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[16] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[17] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[18] : Memory Resource: 0xd8000 - 0xdbfff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[19] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[20] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[21] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[22] : Memory Resource: 0x80000000 - 0xfebfffff of length 0x7ec00000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[23] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[24] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[25] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[26] : Port Resource: 0x0 - 0xcf7 of length 0xcf8 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[27] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[28] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[29] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[30] : Port Resource: 0xd00 - 0xfeff of length 0xf200 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[31] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[32] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[33] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
//
// Done Processing Irp
//
Irp->IoStatus.Status = status;
IoCompleteRequest( Irp, IO_NO_INCREMENT );

0: kd> kc
#
00 ACPI!ACPIBusIrpQueryResourceRequirements
01 ACPI!ACPIDispatchIrp
02 nt!IofCallDriver
03 nt!IopSynchronousCall
04 nt!PpIrpQueryResourceRequirements
05 nt!PiQueryResourceRequirements
06 nt!PiProcessNewDeviceNode
07 nt!PipProcessDevNodeTree
08 nt!PipDeviceActionWorker
09 nt!PipRequestDeviceAction
0a nt!IopInitializeBootDrivers
0b nt!IoInitSystem
0c nt!Phase1Initialization
0d nt!PspSystemThreadStartup
0e nt!KiThreadStartup

0: kd> gu
eax=00000000 ebx=8990520b ecx=80ae0dfa edx=80b18958 esi=f743e51c edi=00000000
eip=f740410e esp=f789a1f4 ebp=f789a218 iopl=0 nv up ei ng nz ac pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000296
ACPI!ACPIDispatchIrp+0x19e:
f740410e ff75fc push dword ptr [ebp-4] ss:0010:f789a214=899c0d58
0: kd> gu
eax=00000000 ebx=00000000 ecx=899c0e74 edx=80b18958 esi=89905220 edi=899050e8
eip=80a2675c esp=f789a228 ebp=f789a234 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!IofCallDriver+0x62:
80a2675c 5f pop edi
0: kd> gu
eax=00000000 ebx=899050e8 ecx=899c0e74 edx=80b18958 esi=f789a2a8 edi=899052b4
eip=80c95e00 esp=f789a23c ebp=f789a264 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!IopSynchronousCall+0x1aa:
80c95e00 8bf0 mov esi,eax
0: kd> gu
eax=00000000 ebx=00000000 ecx=899bf758 edx=80b18958 esi=f789a2cc edi=f789a2a8
eip=80c97814 esp=f789a278 ebp=f789a2a8 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
nt!PpIrpQueryResourceRequirements+0x62:
80c97814 8bf8 mov edi,eax
0: kd> gu
eax=00000000 ebx=00000000 ecx=899bf758 edx=80b18958 esi=804edc6c edi=894ffea8
eip=80c90cc0 esp=f789a2b8 ebp=f789a2d0 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
nt!PiQueryResourceRequirements+0x4e:
80c90cc0 33f6 xor esi,esi

NTSTATUS
PiQueryResourceRequirements(
IN PDEVICE_NODE DeviceNode,
IN HANDLE LogConfKey
)
{


//
// Query the device's basic config vector.
//
status = PpIrpQueryResourceRequirements(
DeviceNode->PhysicalDeviceObject,
&ioResource);
if (!NT_SUCCESS(status)) {

ASSERT(ioResource == NULL);
ioResource = NULL;
}
if (ioResource) {

ioLength = ioResource->ListSize;
} else {

ioLength = 0;
}
//
// Write resource requirements to registry
//
if (LogConfKey) {

PiWstrToUnicodeString(&unicodeString, REGSTR_VALUE_BASIC_CONFIG_VECTOR);

PiLockPnpRegistry(FALSE);

if (ioResource) {

ZwSetValueKey(
LogConfKey,
&unicodeString,
TITLE_INDEX_VALUE,
REG_RESOURCE_REQUIREMENTS_LIST,
ioResource,
ioLength);


0: kd> dv ioResource
ioResource = 0x899bf758
0: kd> dx -r1 ((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758)
((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758) : 0x899bf758 [Type: _IO_RESOURCE_REQUIREMENTS_LIST *]
[<Raw View>] [Type: _IO_RESOURCE_REQUIREMENTS_LIST]
[0x1] : 0x899bf778 [Type: _IO_RESOURCE_LIST *]
0: kd> dx -r1 -nv (*((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758))
(*((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758)) [Type: _IO_RESOURCE_REQUIREMENTS_LIST]
[+0x000] ListSize : 0x468 [Type: unsigned long]
[+0x004] InterfaceType : PNPBus (15) [Type: _INTERFACE_TYPE]
[+0x008] BusNumber : 0x0 [Type: unsigned long]
[+0x00c] SlotNumber : 0x0 [Type: unsigned long]
[+0x010] Reserved [Type: unsigned long [3]]
[+0x01c] AlternativeLists : 0x1 [Type: unsigned long]
[+0x020] List [Type: _IO_RESOURCE_LIST [1]]

0: kd> dv LogConfKey
LogConfKey = 0x800001e8
0: kd> !handle 1e8

PROCESS 899a2278 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 0a200000 ObjectTable: e1000e38 HandleCount: 34.
Image: System

Kernel handle table at e1000e38 with 34 entries in use

01e8: Object: e128eb98 GrantedAccess: 000f003f Entry: e10043d0
Object: e128eb98 Type: (89996048) Key
ObjectHeader: e128eb80 (old version)
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\ENUM\ACPI\PNP0A03\2&DABA3FF&0\LOGCONF

0: kd> dt _device_node 894ffea8
nt!_DEVICE_NODE
+0x000 Sibling : 0x8952a1e0 _DEVICE_NODE
+0x004 Child : (null)
+0x008 Parent : 0x899c1008 _DEVICE_NODE
+0x00c LastChild : (null)
+0x010 Level : 3
+0x014 Notify : (null)
+0x018 State : 302 ( DeviceNodeInitialized )
+0x01c PreviousState : 301 ( DeviceNodeUninitialized )
+0x020 StateHistory : [20] 301 ( DeviceNodeUninitialized )
+0x070 StateHistoryEntry : 1
+0x074 CompletionStatus : 0n0
+0x078 PendingIrp : (null)
+0x07c Flags : 0x230
+0x080 UserFlags : 0
+0x084 Problem : 0
+0x088 PhysicalDeviceObject : 0x899050e8 _DEVICE_OBJECT
+0x08c ResourceList : (null)
+0x090 ResourceListTranslated : (null)
+0x094 InstancePath : _UNICODE_STRING "ACPI\PNP0A03\2&daba3ff&0"
+0x09c ServiceName : _UNICODE_STRING ""
+0x0a4 DuplicatePDO : (null)
+0x0a8 ResourceRequirements : 0x899bf758 _IO_RESOURCE_REQUIREMENTS_LIST
+0x0ac InterfaceType : 0xffffffff (No matching name)
+0x0b0 BusNumber : 0xffffffff
+0x0b4 ChildInterfaceType : 0xffffffff (No matching name)
+0x0b8 ChildBusNumber : 0xffffffff
+0x0bc ChildBusTypeIndex : 0xffff
+0x0be RemovalPolicy : 0 ''
+0x0bf HardwareRemovalPolicy : 0 ''
+0x0c0 TargetDeviceNotify : _LIST_ENTRY [ 0x894fff68 - 0x894fff68 ]
+0x0c8 DeviceArbiterList : _LIST_ENTRY [ 0x894fff70 - 0x894fff70 ]
+0x0d0 DeviceTranslatorList : _LIST_ENTRY [ 0x894fff78 - 0x894fff78 ]
+0x0d8 NoTranslatorMask : 0
+0x0da QueryTranslatorMask : 0
+0x0dc NoArbiterMask : 0
+0x0de QueryArbiterMask : 0
+0x0e0 OverUsed1 : __unnamed
+0x0e4 OverUsed2 : __unnamed
+0x0e8 BootResources : (null)
+0x0ec CapabilityFlags : 0x80
+0x0f0 DockInfo : __unnamed
+0x100 DisableableDepends : 0
+0x104 PendedSetInterfaceState : _LIST_ENTRY [ 0x894fffac - 0x894fffac ]
+0x10c LegacyBusListEntry : _LIST_ENTRY [ 0x894fffb4 - 0x894fffb4 ]
0: kd> dx -id 0,0,899a2278 -r1 ((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758)
((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758) : 0x899bf758 [Type: _IO_RESOURCE_REQUIREMENTS_LIST *]
[<Raw View>] [Type: _IO_RESOURCE_REQUIREMENTS_LIST]
[0x1] : 0x899bf778 [Type: _IO_RESOURCE_LIST *]
0: kd> dx -id 0,0,899a2278 -r1 -nv (*((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758))
(*((ntkrnlmp!_IO_RESOURCE_REQUIREMENTS_LIST *)0x899bf758)) [Type: _IO_RESOURCE_REQUIREMENTS_LIST]
[+0x000] ListSize : 0x468 [Type: unsigned long]
[+0x004] InterfaceType : PNPBus (15) [Type: _INTERFACE_TYPE]
[+0x008] BusNumber : 0x0 [Type: unsigned long]
[+0x00c] SlotNumber : 0x0 [Type: unsigned long]
[+0x010] Reserved [Type: unsigned long [3]]
[+0x01c] AlternativeLists : 0x1 [Type: unsigned long]
[+0x020] List [Type: _IO_RESOURCE_LIST [1]]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0x899bf778))
(*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0x899bf778)) [Type: _IO_RESOURCE_LIST [1]]
[0] [Type: _IO_RESOURCE_LIST]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST *)0x899bf778))
(*((ntkrnlmp!_IO_RESOURCE_LIST *)0x899bf778)) [Type: _IO_RESOURCE_LIST]
[<Raw View>] [Type: _IO_RESOURCE_LIST]
[0] : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[1] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[2] : Memory Resource: 0xa0000 - 0xbffff of length 0x20000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[3] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[4] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[5] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[6] : Memory Resource: 0xcc000 - 0xcffff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[7] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[8] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[9] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[10] : Memory Resource: 0xd0000 - 0xd3fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[11] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[12] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[13] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[14] : Memory Resource: 0xd4000 - 0xd7fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[15] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[16] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[17] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[18] : Memory Resource: 0xd8000 - 0xdbfff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[19] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[20] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[21] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[22] : Memory Resource: 0x80000000 - 0xfebfffff of length 0x7ec00000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[23] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[24] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[25] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[26] : Port Resource: 0x0 - 0xcf7 of length 0xcf8 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[27] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[28] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[29] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[30] : Port Resource: 0xd00 - 0xfeff of length 0xf200 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[31] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[32] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[33] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]

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

无锡黑锋 HF6012 PWM/PFM控制DC-DC降压稳压器技术解析

在移动设备与便携式电子产品中&#xff0c;高效、稳定且小体积的电源管理芯片是保障续航与性能的关键。HF6012 作为一款集成了PWM/PFM自动切换控制的同步降压稳压器&#xff0c;以高达95%的效率、仅40μA的静态电流、1.2A输出能力及全面的保护功能&#xff0c;在SOT23-5L微型封…

作者头像 李华
网站建设 2026/4/23 12:14:21

多路转接select系统调用详解

此文章对应五种IO模型的1.3&#xff1a;I/O多路复用select系统调用的讲解 目录 1. 初识select2. select函数原型2.1 参数解释2.2 函数返回值2.3 关于fd_set结构2.4 理解readfds、writefds、exceptfds 3. 理解select执行过程4. socket就绪条件5. select的特点6. select缺点7. s…

作者头像 李华
网站建设 2026/4/14 13:23:58

【开题答辩全过程】以 基于SSM的电子书店管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/23 11:38:45

【航空旅客满意度大数据分析平台】(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

【航空旅客满意度大数据分析平台】(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 项目亮点&#xff1a; ✅ 完整的大数据分析项目&#xff0c;涵盖数据采集、清洗、存储、分析、可视化全流程 ✅ 基于HadoopHiveSqoopSpring B…

作者头像 李华
网站建设 2026/4/23 11:38:39

计算机小程序毕设实战-基于springboot+小程序的温州博物馆小程序的设计与实现基于Springboot+Uniapp的博物馆预约微信小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 11:34:55

计算机毕业设计springboot学生作业管理系统 基于Spring Boot的在线作业提交与评阅平台 高校课程作业数字化管理平台的设计与实现

计算机毕业设计springboot学生作业管理系统bcgch &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 本系统采用Java作为开发语言&#xff0c;以Spring Boot框架为核心技术支撑&am…

作者头像 李华