barriers / 阅读 / 详情

上次电脑坏了,是因为资源不足,开机开不了,说是API不允许,请问API是个什么东西?

2023-07-27 03:51:04
TAG: 资源 api
共4条回复
cloudcone
1。中断/异常相量的装入和执行方式。

中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序。而事件服务程序的入口点就是中断/异常向量所在的位置。arm的中断向量可以是0x0开始的低地址向量,也可以是在FFFF0000位置的高向量地址。winCE下使用高地址作为trap区,所以在CE下arm使用高地址向量。下面我们来了解一下中断/异常向量的安装和执行过程。
在kernelStart的过程中通过程序将如下代码复制到ffff0000的位置.
VectorInstructions
ldr pc, [pc, #0x3E0-8] ; reset
ldr pc, [pc, #0x3E0-8] ; undefined instruction
ldr pc, [pc, #0x3E0-8] ; SVC
ldr pc, [pc, #0x3E0-8] ; Prefetch abort
ldr pc, [pc, #0x3E0-8] ; data abort
ldr pc, [pc, #0x3E0-8] ; unused vector location
ldr pc, [pc, #0x3E0-8] ; IRQ
ldr pc, [pc, #0x3E0-8] ; FIQ

而在ffff03e0的位置放上如下的数据,每一项(32bit)对应一个异常的跳转地址也就是winCE的异常/中断向量跳转表。该表项的内容就是发生异常后将要执行的服务程序的入口地址。具体如下。
VectorTable
DCD -1 ; reset
DCD UndefException ; undefined instruction
DCD SWIHandler ; SVC
DCD PrefetchAbort ; Prefetch abort

IF :DEF:ARMV4T :LOR: :DEF:ARMV4I
DCD OEMDataAbortHandler ; data abort
ELSE
DCD DataAbortHandler ; data abort
ENDIF

DCD -1 ; unused vector
DCD IRQHandler ; IRQ
DCD FIQHandler ; FIQ
在上面的这些代码/数据在内存空间上按照上述要求放置好以后,每次触发一个异常就自动运行到相应跳转表项所对应的地址执行。

2.异常/中断服务程序
在arm下,由于有7种异常状态包括reset、Undef exceptionoftware interrupt(swi)、Prefech Abort、DataAbort、IRQ、FIQ七种异常/中断。reset仅在复位时发生,其他6种都是在系统运行时发生。当任何一个异常发生并得到响应时,ARM 内核自动完成以下动作:
拷贝 CPSR 到 SPSR_<mode>
设置适当的 CPSR 位:
改变处理器状态进入 ARM 状态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断
更新 LR_<mode>
设置 PC 到相应的异常向量
同时不管异常发生在ARM 还是Thumb 状态下,处理器都将自动进入ARM 状态。并且中断使能会自动被关闭。在这个时候由于部分通用寄存器是不同模式公用的,所以还需要保存这些将会被破坏的寄存器,待到处理完成的时候恢复这些寄存器被中断前的状态。另外在进入异常模式后,lr的值不一定就是我们所需恢复执行的位置,该位置受到异常类型和流水线误差的影响。在SWI模式下,LR就是返回值。在IRQ和FIQ中LR=LR-4,DataAbort下LR=LR-8;具体原因我们就不讨论了,有兴趣可以参看<基于ARM 的嵌入式程序开发要点>一文。下面分别对这些服务程序进行分析。

2-1.undef exception服务程序

undef exception在执行到过非法的指令时产生,通常来模拟一些处理器不支持的功能,如浮点运算。简单说一下undef exception的过程:当当前指令为一条处理器不支持的指令时,处理器会自动动将该指令送交各协处理器(如MMU、FPU)处理,如果这些协处理器都无法识别这条指令的时候,就产生该异常。下面开始看相应的代码。
NESTED_ENTRY UndefException
sub lr, lr, #4 ; (lr) = address of undefined instruction
stmdb sp, {r0-r3, lr}
mov r1, #ID_UNDEF_INSTR
b CommonHandler
ENTRY_END UndefException

上面就是undef Exception的服务程序的入口处(已经将不参与编译和Thumb模式下的代码去掉),通过lr-=4计算出触发异常前的指令地址,同时保存r0-r3和lr入undef_exception stack用于最后恢复现场和取得异常指令本身,随后进入分发程序CommonHandler.CommonHandler是一个公共的异常服务程序,它通过不同的传入参数来进行处理,在这里mov r1,#ID_UNDEF_INSTR就是指定异常模式为undef Exception.

2-2.swi服务程序

按在ARM处理器的设计意图,系统软件的系统调用(SystemCalls)都是通过SWI指令完成。SWI相当于一个中断指令,不同的是SWI不是由外部中断源产生的,同时对应于SWI的异常向量位于0xc的位置或0xffff 000c的位置。也就是说当执行一个swi指令后,当前程序流中断,并转入0xc或0xffff000c执行,同时将CPSR_mode(当前程序状态寄存器)复制入SPSR_svc,转入SVC模式运行(使用特权模式的寄存器组)。也就是说系统通过执行SWI引发系统swi异常后切换入特权模式,系统调用功能号由swi xx后的xx决定,在运行完指定功能的代码后返回异常时的地址并恢复用户模式。我们看看,Wince中这部分代码是如何实现的。
DCD SWIHandler ; SVC<<--------------------------SWI入口点。

LEAF_ENTRY SWIHandler
IF {FALSE}
...
ENDIF
movs pc, lr
ENTRY_END SWIHandler
上面IF {FALSE}到ENDIF之间的代码在编译的时候是得不到编译的(事实上这部分代码是用于开发中调试使用的,针对特殊的硬件平台,一般与我们使用的硬件平台无关。所以下面摘抄的代码都不将不参与编译的内容写入),因此SWI服务程序就是一句话。movs pc, lr也就是直接回到SWI的地方,同时将SPSR_svc恢复到CPSR_mode中。这个过程中并没有进行在系统态执行特定系统指令序的工作,而仅仅是简单的返回,所以这不是系统调用,系统调用还需要根据调用号的不同运行指定的核心态代码。也就是说Wince的系统调用不是通过SWI来完成的,而是通过其他的异常处理手段达成的。

2-3 中断服务程序

IRQ(大概是最熟悉的异常方式了)在外部中断源在需要向处理器请求服务时发生,比如:时钟、外围器件FIFO上/下溢出、按键等等。IRQHandler就是中断的处理句柄,下面我们来具体看看。
----------------------------------------------------------------------------------
NESTED_ENTRY IRQHandler
sub lr, lr, #4 ; fix return address
stmfd sp!, {r0-r3, r12, lr} ;保存将要用到的寄存器和lr压入stack_irq
PROLOG_END
和上面一样,服务程序的入口处都是例行公事的计算返回位置以抵消流水线误差。再将要用到的寄存器压入STACK_IRQ,这样,准备工作就做完了。
; Test interlocked API status.
;INTERLOCKED_START EQU USER_KPAGE+0x380
;INTERLOCKED_END EQU USER_KPAGE+0x400
sub r0, lr, #INTERLOCKED_START
cmp r0, #INTERLOCKED_END-INTERLOCKED_START
bllo CheckInterlockedRestart
上面这部分的内容是关于互锁的检测,由于如信号量这些同步手段都必须作为原子操作进行,不允许打断。所以如果中断发生在互锁API的执行过程中,就需要专门的处理了。这些API都是放在INTERLOCKED_START和INTERLOCKED_END之间的,通过LR很容易就检查出是否是INTERLOCKEDXXX的过程中。这里并不关心互锁的实现就绕开这部分代码继续往下看,当作中断没有发生在interlock过程处理。
;
; CAREFUL! The stack frame is being altered here. It"s ok since
; the only routine relying on this was the Interlock Check. Note that
; we re-push LR onto the stack so that the incoming argument area to
; OEMInterruptHandler will be correct.
;
mrs r1, spsr ; (r1) = saved status reg
stmfd sp!, {r1} ; save SPSR onto the IRQ stack
mov r0,lr ; parameter to OEMInterruptHandler
msr cpsr_c, #SVC_MODE:OR:0x80 ; switch to supervisor mode w/IRQs disabled
stmfd sp!, {lr} ; save LR onto the SVC stack
stmfd sp!, {r0} ; save IRQ LR (in R0) onto the SVC stack (param)
;
; Now we call the OEM"s interrupt handler code. It is up to them to
; enable interrupts if they so desire. We can"t do it for them since
; there"s only on interrupt and they haven"t yet defined their nesting.
;

CALL OEMInterruptHandler
ldmfd sp!, {r1} ; dummy pop (parameter)
ldmfd sp!, {lr} ; restore SVC LR from the SVC stack
msr cpsr_c, #IRQ_MODE:OR:0x80 ; switch back to IRQ mode w/IRQs disabled
; Restore the saved program status register from the stack.
;
ldmfd sp!, {r1} ; restore IRQ SPSR from the IRQ stack
msr spsr, r1 ; (r1) = saved status reg
ldr lr, =KData ; (lr) = ptr to KDataStruct

cmp r0, #SYSINTR_RESCHED ;->时间片已到,进行调度
beq %F10
;SYSINTR_DEVICES EQU 8 ;是否设备中断,中断号是否有效
;SYSINTR_MAX_DEVICES EQU 32
sub r0, r0, #SYSINTR_DEVICES
cmp r0, #SYSINTR_MAX_DEVICES
;由此可以看出windowsCE的系统中断号最大支持32种从9-40.
;其中第16号(24)被定义为SYSINTR_FIRMWARE
; If not a device request (and not SYSINTR_RESCHED)

ldrhsb r0, [lr, #bResched] ; (r0) = reschedule flag
bhs %F20 ; not a device request

;PendEvents EQU 0x340 ; offset 0x10*sizeof(DWORD) of aInfo
;device 中断
ldr r2, [lr, #PendEvents] ; (r2) = pending interrupt event mask
mov r1, #1
orr r2, r2, r1, LSL r0 ; (r2) = new pending mask
str r2, [lr, #PendEvents] ; save it
;*PendEvents = *PendEvents|(1<<InterruptNO);
;
; mark reschedule needed
;情况1:r0=SYSINTR_RESCHED=1
;情况2: r0 =r0-SYSINTR_DEVICES>=SYSINTR_MAX_DEVICES
10 ldrb r0, [lr, #bResched] ; (r0) = reschedule flag
orr r0, r0, #1 ; set "reschedule needed bit"
strb r0, [lr, #bResched] ; update flag

20 mrs r1, spsr ; (r1) = saved status register value
and r1, r1, #0x1F ; (r1) = interrupted mode
cmp r1, #USER_MODE ; previously in user mode?
cmpne r1, #SYSTEM_MODE ; if not, was it system mode?
cmpeq r0, #1 ; user or system: is resched == 1
;if(SytemMode(spsr)||UserMode(spsr))&&r0!=1) return;
ldmnefd sp!, {r0-r3, r12, pc}^ ; can"t reschedule right now so return
*************************************************************************************
sub lr, lr, #4
ldmfd sp!, {r0-r3, r12}
stmdb lr, {r0-r3}
ldmfd sp!, {r0}
str r0, [lr] ; save resume address
mov r1, #ID_RESCHEDULE ; (r1) = exception ID
b CommonHandler
ENTRY_END IRQHandler
将spsr_irq压入IRQ堆栈保存。为调用OEMInterruptHandler作准备。(通常中断处理程序切换入系统态执行的目的在于避免使用终端模式下的寄存器,以方便是实现终端套嵌,这儿切入系统态时终端使能是关闭的,对于模态切换的原因我很迷惑。)OEMInterrupt需要在特权模式下执行,所以这里增加了切换入特权(SVC)模式的内容。紧接着将要用与传递参数的寄存器保存。设定传入参数,r0就可以开始调用OEMInterruptHandler了,这里的调用规则遵循windowsCE的规范而不是ATPCS的规范。具体过程参考ARM Parameter Passing@msdn。下面是函数原形。int OEMInterruptHandler(unsigned int ra);这里传入的参数就是上面的r0,事实上r0代表的参数ra并没有实质的作用在这里仅仅是形式上的实现一下而已,不过在这儿可以看到这个传入的ra实际上就是被中断的地址,如果需要知道被中断的位置可以通过ra来查询,而msdn里面说这个参数是保留的。返回的参数也是保存在r0中。其中返回值是系统中断类型。其中SYSINTR_RESCHED为系统时钟中断,每次时间片用完,该时钟便产生中断,并设置kData结构的bResched位,进入调度流程。如果中断类型是系统设备中断,那就设置PendEvents,待再次调度的时候处理中断。所以OEMInterruptHandler必须提前就要对中断进行响应对该中断源设置mask,防止在这过程中同一中断不停发生,导致中断饱和影响程序流的执行,直道中断处理真正完成后再次开放该中断的mask。在这里还可以看到的是系统设备中断号的范围是从SYSINTR_DEVICES到SYSINTR_MAX_DEVICES,也就是从9-40一共32个设备中断号,其中SYSINTR_FIRMWARE为8+16号,这个在编写OAL的中断服务程序时需要注意。如果当前的返回值既不是设备中断号又不是调度中断号,则读出当前调度标示,根据该标示进行判断是否调度/或返回.如果是进入调度流程则恢复初始的寄存器状态,再按CommonHandler的要求保存寄存器。进入CommonHandler,等待分发。

2-3 FIQ服务程序
照例看看程序
NESTED_ENTRY FIQHandler
sub lr, lr, #4 ; fix return address
stmfd sp!, {r0-r3, r12, lr}
PROLOG_END
CALL OEMInterruptHandlerFIQ
ldmfd sp!, {r0-r3, r12, pc}^ ; restore regs & return for NOP
ENTRY_END FIQHandler
LTORG

FIQ是arm体系下特有的异常方式,其工作过程与IRQ类似都是由外部引脚触发但设计用途不同,IRQ用于通常的外部中断源的处理,是作为统一、通用的与外部器件交互的手段,而IRQ仅仅用于处理周期短同时又需要快速处理的场合其触发的事件源通常也来此外部FIQ中断。如:更换电池、数据传输这类工作。可想而知FIQ讲究的是快速,精干。因此FIQ服务程序通常没有分发,而仅仅是针对单一的工作进行处理保证处理的实时性。因此FIQ的处理相对IRQ就简单很多,直接调用
OEMInterruptHandlerFIQ进行处理后返回就完成了整个 FIQ服务程序。
可乐
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
API和内存模式

对于程序写作者来说,操作系统是由本身的API定义的。API包含了所有应用程序能够使用的操作系统函数呼叫,同时包含了相关的数据型态和结构。在Windows中,API还意味着一个特殊的程序架构,我们将在每章的开头进行研究。

一般而言,Windows API自Windows 1.0以来一直保持一致,没什么重大改变。具有Windows 98程序写作经验的Windows程序写作者会对Windows 1.0程序的原始码感觉非常熟悉。API改变的一种方式是进行增强。Windows 1.0支持不到450个函数呼叫,现在已有了上千种函数呼叫。

Windows API和它的语法的最大变化来自于从16位架构向32位架构转化的过程中。Windows从版本1.0到版本3.1使用16位Intel 8086、8088、和286微处理器上所谓的分段内存模式,由于兼容性的原因,从386开始的32位Intel微处理器也支持该模式。在这种模式下,微处理器缓存器的大小为16位,因此C的int数据型态也是16位宽。在分段内存模式下,内存地址由两个部分组成-一个16位段(segment)指针和一个16位偏移量(offset)指标。从程序写作者的角度看,这非常凌乱并带来了long或far指针(包括段地址和偏移量地址)和short或near指标(包括带有假定段地址的偏移量地址)的区别。

从Windows NT和Windows 95开始,Windows支持使用Intel 386、486和Pentium处理器32位模式下的32位平坦寻址内存模式。C语言的int数据型态也扩展为32位的值。为32位版本Windows编写的程序使用简单的平坦线性空间寻址的32位指针值。

用于16位版本Windows的API(Windows 1.0到Windows 3.1)现在称作Win16。用于32位版本Windows的API(Windows 95、Windows 98和所有版本的Windows NT)现在称作Win32。许多函数呼叫在从Win16到Win32的转变中保持相同,但有些需要增强。例如,图像坐标点由Win16中的16位值变为Win32中的32位值。此外,某些Win16函数呼叫返回一个包含在32位整数值中的二维坐标点。这在Win32中不可能,因此增加的新函数呼叫以不同方式运作。

所有32位版本的Windows都支持Win16 API(以确保和旧有应用程序兼容)和Win32 API(以运行新应用程序)。非常有趣的是,Windows NT与Windows 95及Windows 98的工作方式不同。在Windows NT中,Win16函数呼叫通过一个转换层被转化为Win32函数呼叫,然后被操作系统处理。在Windows 95和Windows 98中,该操作正相反:Win32函数呼叫通过转换层转换为Win16函数呼叫,再由操作系统处理。

在同一时刻有两个不同的Windows API集(至少名称不同)。Win32s (「s」代表「subset(子集)」)是一个API,允许程序写作者编写在Windows 3.1上执行的32位应用程序。该API仅支持已被Win16支持的32位函数版本。此外,Windows 95 API一度被称作Win32c(「c」代表「compatibility(兼容性)」),但该术语已被抛弃了。

现在,Windows NT和Windows 98都被认为能够支持Win32 API。然而,每个操作系统依然都支持某些不被别的操作系统支持的某些功能特性。因为它们的相同之处是相当可观的,所以有可能编写在两个操作系统下都可执行的程序。而且,人们普遍认为这两个产品最终会合而为一。
http://column.b***.com/63460.html
陶小凡

Application Programming Interface 应用编程接口

Application Programming Interface

WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序.

小教板

高级电源管理。

相关推荐

kdata是什么牌子

是深圳金田科技。深圳金田科技设于中国硅谷、经济特区--深圳市,是集科研、设计、生产、营销于一体的高科技企业。现公司拥有一支高素质、高效率的员工团队,五大事业部(品牌运营部、外贸出口部、OEM销售部、生产部、工程研发部)。公司创业以来,一直奉行:以优良品质创信誉,持续改进促发展的经营理念,坚持不断创新,满足客户要求。弘扬:团结和谐、努力进取、不断更新自我的企业文化。力求成为行业楷模,达到营销、管理、技术、产品、服务五样最好。重视人才、品牌、形象,三大经营发展战略,全面提升企业整体素质与管理水平,与时俱进,增强企业竞争力,永做第一。企业产品适用打印材质金田平板彩印机可将高精度的图像打印在物体材质的表面,适用的材质如:亚克力、木竹材料、石材、金属、皮革、水晶玻璃类、瓷质、各种塑料(ABS、PC、PE、PP、PU)铜版纸、瓷砖/瓷器等产品以及各种成份复杂的有机物体上。适用打印产品U盘、MP3/MP4、移动硬盘、手机壳、亚克力制品、光盘、礼品、玩具、文具、家私、瓷器、广告牌、玻璃移门。
2023-07-25 16:32:451

kdata金田的u盘怎么样

好。kdata金田的u盘是一款读写速度非常快的u盘,所以好。u盘是通过USB接口接入的储存盘,是闪存的一种,可以做到便捷式实现即插即用。
2023-07-25 16:33:021

kf16是多少寸

30乘13乘6mm。kf16是指KDATAKF16,是一款U盘,全称为USB闪存驱动器,该U盘的存储容量为8GB,外形尺寸为30乘13乘6mm,产品重量为30g,U盘与硬盘的最大不同是,U盘不需物理驱动器,即插即用,且其存储容量远超过软盘,极便于携带。
2023-07-25 16:33:081

kdata金田 固态硬盘怎么样

  规格参数编辑  主体  品牌KDATA  系列USB3.0  型号KF31-128G  颜色黑色  外壳材质金属  规格  容量128G  指示灯有  尺寸8.5mm高*18mm宽*69mm长  重量13g  特性  独特设计金属运动款,透明USB盖帽可连接尾部,防丢!  包装清单编辑  KDATA KF31-128G × 1 塑料包装 × 1 挂绳 × 1
2023-07-25 16:33:183

KDATA这个牌子的固态硬盘怎么样

您好 2246EN的主控,南亚256M缓存,海力士的MLC颗粒(据说没有东芝的好),电路部分基本没有缩水,但工艺实在是...手工一般啊 建议您购买 三星或者是闪迪的, 望采纳 谢谢
2023-07-25 16:33:432

手机u盘哪个牌子最好

手机U盘,全称智能手机USB闪存驱动器,英文名“smart phone USB flash disk”。 它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑或智能手机连接,实现即插即用。手机U盘又称智能U盘-V盘,英文名“vpan”。这是一种使用无线wifi技术,无需连接的高速移动存储产品。区别于普通手机U盘。中文名手机U盘外文名smart phone USB flash disk全称智能手机USB闪存驱动器又称智能U盘-V盘最早研发金田(KDATA)的数码存储公司简介手机U盘最早是由一家名为金田(KDATA)的数码存储公司研发的专利产品,主要针对日益增长的高效移动办公及娱乐共享与数据交换的需求。后来神族数码(samzu)加以改进,又推出了手机插卡U盘,无需带双头,体积变得更小。随着智能手机的迅速普及,手机已超过笔记本电脑成为最重要的移动数码终端设备。大量数据内容的不断增加,手机和电脑之间的数据共享变得越来越重要,手机U盘极大的方便了智能手机的移动存储需求。随着科技的发展,苏州一家名为四维空间(FDSTECH)的it公司研发的专利产品--“智能手机U盘”,主要针对智能手机的个人隐私、办公娱乐、数据 跨平台交换的需求所研发。方便的很多智能手机的移动数据备份加密。[1]组成手机U盘的组成很简单:外壳+机芯。智能手机U盘的组成:外壳+加内置电池+加wifi芯片+机芯。功能1.手机U盘保留了普通U盘的所有功能,例如:可以制作成系统安装启动盘手机U盘可以像普通U盘一样正常使用,在PC上读取和存储数据,更可以将PC上的数据拷贝至手机U盘,为我们在移动设备上读取这些文件做准备。2.在常规U盘的基础上基于OTG技术的支持,通过Micro USB等接口连接智能手机、平板电脑等设备进行读取数据。支持比较优良的当属安卓(Android)系统的设备。
2023-07-25 16:34:071

access mdb数据库导入到mysql中报错了,咋整

1.打开Access程序,新建一个Access数据库。2.创建一个ODBC连接,点击【外部数据】-->【ODBC数据库】---->【通过链接表链接到数据源】。,可以选择“复制表”或“链接表”。链接表的好处是mysql数据源更新,Access链接数据表跟着更新,Access可以作为mysql数据库的界面。3.在弹出的界面,点击选项卡【机器数据源】---->【新建】,会弹出警示对话框,点击【确定】即可。4.在弹出的界面,点击【用户数据源】,点击【下一步】,在弹出的见面,选中【MySQLODBC5.2UnicodeDriver】,点击【完成】。5.这个步骤最为关键,是具体的数据链接源。Datasourcename:kdata(这是将这个连接命名,读者可以自己随便命名),TCP/IPserver:localhost(本地数据库一般都是localhost),Port:3306(本地数据库一般都是3306这个接口)。User:Password:(这个是localhost里设定的用户名和密码,很多本地数据库的通用用户名为root,密码为空。图中演示的是笔者自己设定的用户名和密码)。Database:(可以先点击右侧的【test】按钮,测试一下,如果上面设置的都是有效的,则可以选择希望连接的mysql数据库了)。----------------本地数据库设置这个地方,如果不清楚,建议安装一下开源的xampp软件,自动安装mysql
2023-07-25 16:34:161

我想买个3.0的32G U盘,最好是SLC芯片的,读写速度大于30M/s,性价比高,求推荐牌子和型号?感谢。

淘宝上有 雷卡沙 32G U盘 SLC 大品牌! 190+至200元!
2023-07-25 16:34:272

matlab程序,拟合函数lsqcurvefit

你的问题主要是没有理解lsqcurvefit使用规则,即函数要求a拟合系数=lsqcurvefit("函数表达式",初值x0,自变量X,因变量y);对于多自变量x1、x2,应这样处理,将多自变量看成自变量向量,即 X=[x1 x2]。所以,问题可以变成这样X=[kdata ,ldata]; %自变量(要求列向量)y=qdata; %因变量(要求列向量)curvefun3函数应下列格式来修改。function f=curvefun3(a,x)f=a(1)*(x(:,1).^a(2)).*(x(:,2).^a(3));end其余命令,可以按lsqcurvefit格式来写。
2023-07-25 16:35:121

请问vb代码 S = kData(20) * 256& + cData(21) 是什么意思,特别是“* 256&”不明白!

S 和 kData、cData是什么类型的? 应该字符串吧?&是字符串连接符,至于那个*256.。。不好说啊,移位吗= =
2023-07-25 16:35:312

爱因斯坦的相对论发表时间?

1905年
2023-07-25 16:35:394

南北极的水里有什么鱼 有植物吗 请列举其中的一个食物链

海藻--虾--鳕鱼--海豹--北极熊
2023-07-25 16:35:533

太阳系的行星中自转速度最快的是木星吗?

是的。木星,自转周期为9小时50分30秒木星是九大行星中最大的一颗,可称得上是“八星之王”了。按距离太阳由近及远的次序排第五颗。在天文学上,把木星这类巨大的行星称为“巨行星”。木星还是天空中最亮的星星之一,其亮度仅次于金星,比最亮的恒星天狼星还亮。在我国古代,木星曾被人们用来定岁纪年,由此而被称做“岁星”。西方天文学家称木星为“朱庇特”,朱庇特是罗马神话中的众神之王,相当于希腊神话中无所不能的宙斯。详情请链接http://kdata.cn/html/search_after_outer_space/chronometer_astronomical_phenomena/20070328/30767.html
2023-07-25 16:36:001

手机U盘插进手机里怎样使用?

打开手机设置,找到“更多”。2.找到“OTG”,选择打开。3.出现以下提示后,重启手机即可使用。拓展资料:手机U盘,全称智能手机USB闪存驱动器,英文名“smart phone USB flash disk”。 它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑或智能手机连接,实现即插即用。手机U盘又称智能U盘-V盘,英文名“vpan”。这是一种使用无线wifi技术,无需连接的高速移动存储产品。区别于普通手机U盘。
2023-07-25 16:36:182

如何找程序线程入口地址,已经可以枚举id和句柄

在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。因此无论在哪个操作系统上,获取线程名称是诊断线程相关问题的重要一步。从线程ID获取线程名称通常的方法是,先获取该线程的入口地址,然后枚举进程内所有已加载模块,最后判断线程入口地址落在哪个加载模块范围内。枚举进程内已加载模块可用Win32标准的CreateToolhelp32Snapshot/Module32First/Module32Next系列ToolHelp API得到。获取线程入口地址则没有线程的Win32 API可用。不过在Windows NT based操作系统上(包括Windows NT 4.0/2000/XP/2003,等),有一个未公开的Native API可用:NtQueryInformationThread。其声明如下:DWORDWINAPINtQueryInformationThread(HANDLEThreadHandle,THREAD_INFORMATION_CLASSThreadInformationClass,PVOIDThreadInformation,ULONGThreadInformationLength,PULONGReturnLength);获取线程入口地址可用:DWORDGetThreadStartAddress(DWORDdwThreadId){HANDLEhThread=OpenThread(THREAD_ALL_ACCESS,FALSE,dwThreadId);DWORDretaddr,len,error;retaddr=len=0;error=NtQueryInformationThread(hThread,9,&retaddr,sizeof(retaddr),&len);CloseHandle(hThread);if(error!=0)retaddr=0;returnretaddr;}在Windows CE上就没这么幸运了,没有任何现成的API可用。官方Windows CE Base Team的blog对这个问题的回答是可以用Remote Kernel Tracker,不过这需要你build一个特殊的kernel image,enable一些profiler功能-这在显示的问题诊断中显然是不实际的。那么有没有办法不需要什么特殊的配置就可像Windows桌面操作系统那样获得入口地址呢?有是有的,不过需要一些hack手段。仔细研究CE下的Thread内核数据结构,就会发现Thread结构中有一项是记录线程入口地址的。typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/因此要做的就是想办法根据线程ID或handle得到这个数据。再研究,发现线程的Thread内核数据结构可通过句柄得到:PTHREADpTh=HandleToThread(ThreadHandle);而且,在Windows CE下,线程ID和其handle的值是一样的!!因此我们可以写一个这样的函数从线程ID拿到入口地址:DWORDGetThreadStartAddress(DWORDdwThreadId){DWORDdwStartAddress=0;BOOLfOldMode=SetKMode(TRUE);PTHREADpTh=HandleToThread((HANDLE)dwThreadId);if(pTh){dwStartAddress=(DWORD)MapPtrToProcess((LPVOID)pTh-dwStartAddr,pTh-pOwnerProc-hProc);}returndwStartAddress;}为了使用这些内核数据结构,我们还需要另外一些辅助结构和函数,比较完整的代码如下。当然,官方肯定是不建议这么做的,但是重要的是解决问题,你说呢。typedefstructProcess{DWORD_1[2];HANDLEhProc;/*08:handleforthisprocess,neededonlyforSC_GetProcFromPtr*/}PROCESS,*PPROCESS;typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/typedefstructcinfo{characName[4];/*00:objecttypeIDstring*/uchardisp;/*04:typeofdispatch*/uchartype;/*05:apihandletype*/ushortcMethods;/*06:#ofmethodsindispatchtable*/constPFNVOID*ppfnMethods;/*08:ptrtoarrayofmethods(inserveraddressspace)*/constDWORD*pdwSig;/*0C:ptrtoarrayofmethodsignatures*/PPROCESSpServer;/*10:ptrtoserverprocess*/}CINFO;/*cinfo*/typedefCINFO*PCINFO;typedefstruct_HDATAHDATA,*PHDATA;struct_HDATA{DWORD_1[2];/*00:linksforactivehandlelist*/HANDLEhValue;/*08:Currentvalueofhandle(nonce)*/DWORDlock;/*0C:accessinformation*/DWORDref;/*10:referenceinformation*/constCINFO*pci;/*14:ptrtoobjectclassdescriptionstructure*/PVOIDpvObj;/*18:ptrtoobject*/DWORDdwInfo;/*1C:extrahandleinfo*/};/*20:sizeof(HDATA)*/#ifdefx86structKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[4];ulonghandleBase;/*0x094baseaddressofhandletable*/};/*KDataStruct*/#endif#ifdefARMstructKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[6];ulonghandleBase;/*0x09chandletablebaseaddress*/};/*KDataStruct*/#endif#defineHandleToThread(h)((THREAD*)GetObjectPtrByType((h),SH_CURTHREAD))#defineHANDLE_ADDRESS_MASK0x1ffffffcvoidh2p(HANDLEh,PHDATA&phdRet){if((ulong)h<NUM_SYS_HANDLES+SYS_HANDLE_BASE&&(ulong)h=SYS_HANDLE_BASE)h=((KDataStruct*)PUserKData)-ahSys[(uint)h-SYS_HANDLE_BASE];if(h){phdRet=(PHDATA)(((ulong)h&HANDLE_ADDRESS_MASK)+((KDataStruct*)PUserKData)-handleBase);if(phdRet-hValue!=h)phdRet=0;}elsephdRet=0;}PVOIDGetObjectPtrByType(HANDLEh,
2023-07-25 16:37:281

建筑上的“矢状券”是指哪种建筑造型 。

矢状券是哥特式建筑的基本因素,既有助于增加建筑的高度,又可作装饰,还能增加“天堂”的幻觉。罗马式以水平线和石头圆拱顶为27主,宽阔平稳,但不免有沉闷笨重之感,哥特式由于以尖顶拱券和垂直线为主,高耸、轻盈、富丽、精致。前者墙壁占面积大,后者除了门窗几乎没有墙壁,前者的装饰雕刻和绘画,更倾向于程式化和几何图案,后者的雕刻和绘画,更强调生活的真实感。前者以其敦厚、坚实的形体显示教会的威力,后者则以轻巧、上升的力量控制民众的精神世界。哥特式教堂以巴黎圣母院和米兰大教堂著称,代表中世纪建筑艺术的最高成就。飞券结构的样子http://kdata.cn/html/social_science/industry_machine/20070411/45789.html
2023-07-25 16:37:392

我家里养里群兔子是圈养的最近每隔几天就无故的死一只是怎么回事啊?

兔子翻窝
2023-07-25 16:38:015

这个牌子的SLC U盘好吗

别买,我有这个U盘首先,U盘读写量远不及系统盘,不需要考虑寿命问题,一般来说U盘是不会掉速也不会坏的,不读盘等问题用diskgenius和傲梅分区助手通通可以解决。其次,就算贴的flash的颗粒是slc或者mlc的,也有档次之分,档次细分有很多,大致分为3级,正片、白片和黑片。品牌货多数贴的都是黑片。正片tlc速度也比黑片slc快得多。这个U盘主控为银灿is917,银灿的主控,4K小文件读写速度都垃圾,更何况917比903慢得多。我用as ssd测速,读42M/s,写41M/s,不管重装系统还是格式化U盘,都是这个结果。金田这个牌子,U盘都是银灿的主控,去淘宝看看就知道了。买U盘不要买品牌货,高价低配性能差,买就买diy的U盘,也就是根据主控型号来买。U盘性能最强的是固态U盘,主控型号为2246xt(en),桥接的芯片为asm1153(1351),虽然有点贵,但是性价比很高,读写速度和固态硬盘是一样的。其次就数到ns1081、sm3350、sm3281和sm3280了,这些才是真正的U盘主控,sm3350最强,性能接近固态U盘。我买的是ns1081主控的U盘,在闲鱼上买的,读150写140,4K读写10M左右,as ssd总分80左右。这些diy的U盘,多数在闲鱼上
2023-07-25 16:38:191

如何选择国外的服务器?

1. 北美 BudgetVM 洛杉矶 (半程 CN2), Linode Fremont (Telia 直连), globalfrag (半程 CN2), HostUS (半程 CN2), rfchost (C3 全程 CN2) 2. 日本 IDCF (电信直连), Ablenet (联通友好) 3. 新加坡 Aliyun (电信直连), Krypt (CN2), OneAsiaHost (PCCW) 4. 台湾 昨日小筑 (中华电信迷之网络,QoS 不高), HiNet (中华电信) 5. 韩国 Kdatacenter (SK Broadband), xhostfire (KT), 星光 (KT)
2023-07-25 16:38:352

如何选择国外的服务器?

1、其实做站如果是给国内用户访问的话,首选自然是国内的空间服务器,毕竟物理距离近,但是有个问题就是需要备案,备案我觉得还不是最主要的问题,最主要的还是主机本身,我们知道国内的机器配置那是普遍低,最严重限制的是网络,看似不错的一款主机宽带给你限制2m,3m,多了也就是5m,再想多,那钞票就要花花的仍了,在价格相近情况下,这一点就无法和国外独享百兆,千兆的相提并论了。2、备案也是很多人决定投身国外主机的一个主要因素,国内机房“关键词”黑名单,让人也是抓狂,动不动就触发关键词过滤,导致页面被屏蔽,而且多数时候是些无关紧要的词汇,或是前语和后语的衔接词根本不是“黑名单”愿意的也会屏蔽,总之就是小站各种限制,处处设卡。受众用户在国内一样可以使用国外的主机,也不会有明显的差别。只要你优化好了,速度一样可以刚刚的,看我的在国内多数地区还是可以的。什么日本,新加坡,马来西亚,甚至美国西岸这些都可以用。体验上不会很差,主要是内容了内容足够吸引的话,人们不会介意多等1-2S的时间。近期来看的话linode家的日本是不推荐,因为很多人不是拿它来建站的,导致他家的很多ip进了我方的黑名单。近期要是选用日本主机的话建议用vultr家的.如果你要求稍微高点可以考虑谷歌云或是微软家的日本 新加坡,用的人少 线路还可以。如果你资金允许的话可以上香港的机器,相比国内还是有优势,还有台湾的,不过台湾的价格是有些高,但是延迟 带宽各方面在国内比较不错。
2023-07-25 16:39:013

世界上什么树最大

有种树很大,不知道叫什么,当地人叫“世界爷”
2023-07-25 16:39:548

螃蟹吃些什么食物呢?

小鱼小虾,海菜
2023-07-25 16:40:114

求人头骨和面部肌肉的结构图。

2023-07-25 16:40:222

猎杀潜航3在下雨有风浪情况下能用甲板炮,怎么修改

改程序,记得要备份。甲板炮装弹时 V: kdataLibraryGUNS_SUB.SIM鱼雷装弹时间修改dataSubmarine各型潜艇文件夹里的.sim" 甲板炮在恶劣天气下正常使用的修改Submarine各型潜艇文件夹里的.cfg甲板炮射程距离修改dataLibraryShells.sim甲板炮威力修改dataLibraryShells.zon修改了所有鱼雷的威力dataLibraryTorpedo.zon潜艇的速度修改DataSubmarine各型潜艇文件夹里的.sim
2023-07-25 16:40:581

USB分线器好哪种好

正常连接USB分线器对电脑是没有什么影响,如果你需要接功率较大的设备就需要购买有电源接口的,比如:连接硬盘,由于电脑USB输出功率不够,分线器就需要外接电源。绿联性价比比较高。
2023-07-25 16:41:216

求信长之野望12威力加强版的新武将登陆器

迅雷上有资源 可惜我下不下来啊 与您一起痛苦
2023-07-25 16:41:465

手机连接U盘怎么编资料

手机U盘,全称智能手机USB闪存驱动器,英文名“smart phone USB flash disk”。 它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑或智能手机连接,实现即插即用。手机U盘最早是由一家名为金田(KDATA)的数码存储公司研发的专利产品,主要针对日益增长的高效移动办公及娱乐共享与数据交换的需求。后来神族数码(samzu)加以改进,又推出了手机插卡U盘,无需带双头,体积变得更小。手机U盘Micro USB 口插入手机端,手机时显示的“USB大容量存储已连接”手机U盘使用在手机文件管理程序可以看到手机U盘,也可以通过某些程序,例如视频播放器,手动找到U盘。在系统中实际使用类似手机内存卡,非常简便。新一代手机插卡U盘智能手机U盘1、 Wi-Fi连接打开智能U盘(V盘)开关,在手机或平板【设置】功能里打开WLAN,找到你购买的智能手机U盘WI-FI名称(可修改)后输入WI-FI登录密码(可修改)即可连接。 共2张智能手机U盘2、 隐私加密智能手机U盘(V盘)私有盘即为加密盘,需要主人密码才能登陆。点击私有盘后输入出厂包装中的产品信息密码即可登陆私有盘,并在其中操作,私有盘中所 有资料均为加密,只有自己才能看到。3、 备份、恢复以短信为例:在客户端【手机】短信界面选择右上方"编辑",勾选短信,即可上传备份;也可将某个号码设置为常用联系人,设置后,该号码 的新增短信就可以自动备份了。需要恢复时,在私有盘中选择需要恢复的短信就可以直接恢复到手机中。其他模块操作同短信操作相似,十分简单。4、 跨平台操作只需在安卓或苹果手机中分别安装相应版本的VPAN客户端,然后将需要同步的资料上传到智能手机U盘中,随后在另一部手机中就可直接下载恢复, 由智能手机U盘自动计算转换数据,稍等一两分钟即可。 共2张短信备份U盘5、 多人共享在【设置】中,可修改访问人数,可允许5台设备同时访问。将需要共享的文件上传到公共盘中,其他用户通过Wi-Fi登陆智能手机U盘(且默认只能登 陆公共盘)就可以共享了,不需要下载就可以直接观看,其他用户也可对其中资源进行删除或选择下载到自己的手机中。
2023-07-25 16:42:028

KDATA(金田)U盘真的是SLC芯片吗?

芯片不知道 你查1下是不是JS29F16B08HCND1 这个型号的 若是的话配银灿主控902的应该,不能CDROM貌似 ,用主控902E的应该可以 读写150-200
2023-07-25 16:42:264

手机u盘哪个牌子最好

手机U盘,全称智能手机USB闪存驱动器,英文名“smart phone USB flash disk”。 它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑或智能手机连接,实现即插即用。手机U盘又称智能U盘-V盘,英文名“vpan”。这是一种使用无线wifi技术,无需连接的高速移动存储产品。区别于普通手机U盘。中文名手机U盘外文名smart phone USB flash disk全称智能手机USB闪存驱动器又称智能U盘-V盘最早研发金田(KDATA)的数码存储公司简介手机U盘最早是由一家名为金田(KDATA)的数码存储公司研发的专利产品,主要针对日益增长的高效移动办公及娱乐共享与数据交换的需求。后来神族数码(samzu)加以改进,又推出了手机插卡U盘,无需带双头,体积变得更小。随着智能手机的迅速普及,手机已超过笔记本电脑成为最重要的移动数码终端设备。大量数据内容的不断增加,手机和电脑之间的数据共享变得越来越重要,手机U盘极大的方便了智能手机的移动存储需求。随着科技的发展,苏州一家名为四维空间(FDSTECH)的it公司研发的专利产品--“智能手机U盘”,主要针对智能手机的个人隐私、办公娱乐、数据 跨平台交换的需求所研发。方便的很多智能手机的移动数据备份加密。[1]组成手机U盘的组成很简单:外壳+机芯。智能手机U盘的组成:外壳+加内置电池+加wifi芯片+机芯。功能1.手机U盘保留了普通U盘的所有功能,例如:可以制作成系统安装启动盘手机U盘可以像普通U盘一样正常使用,在PC上读取和存储数据,更可以将PC上的数据拷贝至手机U盘,为我们在移动设备上读取这些文件做准备。2.在常规U盘的基础上基于OTG技术的支持,通过Micro USB等接口连接智能手机、平板电脑等设备进行读取数据。支持比较优良的当属安卓(Android)系统的设备。
2023-07-25 16:42:502

手机U盘哪个牌子好?

神马叫手机U盘?
2023-07-25 16:42:597

手机U盘的简介

手机U盘最早是由一家名为金田(KDATA)的数码存储公司研发的专利产品,主要针对日益增长的高效移动办公及娱乐共享与数据交换的需求。后来神族数码(samzu)加以改进,又推出了手机插卡U盘,无需带双头,体积变得更小。随着智能手机的迅速普及,手机已超过笔记本电脑成为最重要的移动数码终端设备。大量数据内容的不断增加,手机和电脑之间的数据共享变得越来越重要,手机U盘极大的方便了智能手机的移动存储需求。随着科技的发展,苏州一家名为四维空间(FDSTECH)的it公司研发的专利产品--“智能手机U盘”,主要针对智能手机的个人隐私、办公娱乐、数据 跨平台交换的需求所研发。方便的很多智能手机的移动数据备份加密。
2023-07-25 16:43:201

如何 mysql 导入 access数据库

如何 mysql 导入 access数据库1.打开Access程序,新建一个Access数据库。2.创建一个ODBC连接,点击【外部数据】-->【ODBC数据库】---->【通过链接表链接到数据源】。,可以选择“复制表”或“链接表”。链接表的好处是mysql数据源更新,Access链接数据表跟着更新,Access可以作为mysql数据库的界面。3.在弹出的界面,点击选项卡【机器数据源】---->【新建】,会弹出警示对话框,点击【确定】即可。4.在弹出的界面,点击【用户数据源】,点击【下一步】,在弹出的见面,选中【MySQL ODBC 5.2 Unicode Driver】,点击【完成】。5.这个步骤最为关键,是具体的数据链接源。Data source name:kdata(这是将这个连接命名,读者可以自己随便命名),TCP/IP server:localhost(本地数据库一般都是localhost),Port:3306(本地数据库一般都是3306这个接口)。User:Password:
2023-07-25 16:43:351

Kdata/金田 S3-128GB固态硬盘怎么样,性能如何

买过两个,都会出现丢数据的问题主要体现在安装了启动盘过段时间后不能用复制进去的安装包,过段时间用就会报错。我都不敢往里放东西了,尤其是工作文件等
2023-07-25 16:44:002

Kdata金田S3-64GBSSD固态硬盘笔记评价如何,好用吗

KDATA垃圾硬盘, 用不到1年就坏, 坏了给换新, 结果用了不到半年,自己起火了正常使用中,突然起火, 把我电源接头都烧烂了, 我电脑挂了3块硬盘,就他的着火了, 找客服, 一开始还很有抱歉的意思,说给我换, 我也就不追究其他的了, 结果后来换了个客户给我说只能修, 再后来, 直接说修不了, 还说是我的问题造成的硬盘也不要了, 就想让各位看观看看这硬盘的质量, 到底多垃圾!!
2023-07-25 16:44:212

kdatacenter的VPS是单向还是双向流量计算

是双向,以kdaracenter为代表的这类服务商都这样。
2023-07-25 16:44:451

太阳系的行星中自转速度最快的是木星吗?

是的木星自转9小时多顺便说一句金星自转比公转快
2023-07-25 16:44:532

太阳系的行星中自转速度最快的是木星吗?

是的。木星,自转周期为9小时50分30秒木星是九大行星中最大的一颗,可称得上是“八星之王”了。按距离太阳由近及远的次序排第五颗。在天文学上,把木星这类巨大的行星称为“巨行星”。木星还是天空中最亮的星星之一,其亮度仅次于金星,比最亮的恒星天狼星还亮。在我国古代,木星曾被人们用来定岁纪年,由此而被称做“岁星”。西方天文学家称木星为“朱庇特”,朱庇特是罗马神话中的众神之王,相当于希腊神话中无所不能的宙斯。详情请链接http://kdata.cn/html/search_after_outer_space/chronometer_astronomical_phenomena/20070328/30767.html
2023-07-25 16:45:021

闪电如何产生

雷公生气了 `` HOHO 要嘛 9 4 玉帝命令滴` - -
2023-07-25 16:45:234

急求科学生活小知识!

具体点的范围啊
2023-07-25 16:45:335

金蝶K3凭证录入后无法修改报错 “Activex 部件不能创建对象”,只有一个帐套报这个错

建议重新注册中间层
2023-07-25 16:45:484

谁有日常生活中的科学知识?急需!!!!!!!!

你也没说要知道什么啊
2023-07-25 16:45:576

金田kf31m-16gb 3.0 slc高速u盘怎么样

您的要求是SLC芯片的U盘,还要是USB 3.0的接口,那么您对芯片的种类方面的技术应该是熟悉的,在这里我就不用多说了,您对U盘要求是比较高的了。 根据您的要求,可以考虑以下几款: 1. kdata 32g U盘 USB3.0 SLC芯片市高速优盘KF31
2023-07-25 16:46:131

我的配置不低但是玩魔兽世界卡?

楼主你好,一般出现这种情况,可能是您的网速不够,或者显卡驱动需要更新,可以下载驱动人生进行更新。(游戏内部设置不恰当也会引起此类情况。)
2023-07-25 16:46:323

如何从线程ID获取线程名称

在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。因此无论在哪个操作系统上,获取线程名称是诊断线程相关问题的重要一步。从线程ID获取线程名称通常的方法是,先获取该线程的入口地址,然后枚举进程内所有已加载模块,最后判断线程入口地址落在哪个加载模块范围内。枚举进程内已加载模块可用Win32标准的CreateToolhelp32Snapshot/Module32First/Module32Next系列ToolHelp API得到。获取线程入口地址则没有线程的Win32 API可用。不过在Windows NT based操作系统上(包括Windows NT 4.0/2000/XP/2003,等),有一个未公开的Native API可用:NtQueryInformationThread。其声明如下:DWORDWINAPINtQueryInformationThread(HANDLEThreadHandle,THREAD_INFORMATION_CLASSThreadInformationClass,PVOIDThreadInformation,ULONGThreadInformationLength,PULONGReturnLength);获取线程入口地址可用:DWORDGetThreadStartAddress(DWORDdwThreadId){HANDLEhThread=OpenThread(THREAD_ALL_ACCESS,FALSE,dwThreadId);DWORDretaddr,len,error;retaddr=len=0;error=NtQueryInformationThread(hThread,9,&retaddr,sizeof(retaddr),&len);CloseHandle(hThread);if(error!=0)retaddr=0;returnretaddr;}在Windows CE上就没这么幸运了,没有任何现成的API可用。官方Windows CE Base Team的blog对这个问题的回答是可以用Remote Kernel Tracker,不过这需要你build一个特殊的kernel image,enable一些profiler功能-这在显示的问题诊断中显然是不实际的。那么有没有办法不需要什么特殊的配置就可像Windows桌面操作系统那样获得入口地址呢?有是有的,不过需要一些hack手段。仔细研究CE下的Thread内核数据结构,就会发现Thread结构中有一项是记录线程入口地址的。typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/因此要做的就是想办法根据线程ID或handle得到这个数据。再研究,发现线程的Thread内核数据结构可通过句柄得到:PTHREADpTh=HandleToThread(ThreadHandle);而且,在Windows CE下,线程ID和其handle的值是一样的!!因此我们可以写一个这样的函数从线程ID拿到入口地址:DWORDGetThreadStartAddress(DWORDdwThreadId){DWORDdwStartAddress=0;BOOLfOldMode=SetKMode(TRUE);PTHREADpTh=HandleToThread((HANDLE)dwThreadId);if(pTh){dwStartAddress=(DWORD)MapPtrToProcess((LPVOID)pTh-dwStartAddr,pTh-pOwnerProc-hProc);}returndwStartAddress;}为了使用这些内核数据结构,我们还需要另外一些辅助结构和函数,比较完整的代码如下。当然,官方肯定是不建议这么做的,但是重要的是解决问题,你说呢。typedefstructProcess{DWORD_1[2];HANDLEhProc;/*08:handleforthisprocess,neededonlyforSC_GetProcFromPtr*/}PROCESS,*PPROCESS;typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/typedefstructcinfo{characName[4];/*00:objecttypeIDstring*/uchardisp;/*04:typeofdispatch*/uchartype;/*05:apihandletype*/ushortcMethods;/*06:#ofmethodsindispatchtable*/constPFNVOID*ppfnMethods;/*08:ptrtoarrayofmethods(inserveraddressspace)*/constDWORD*pdwSig;/*0C:ptrtoarrayofmethodsignatures*/PPROCESSpServer;/*10:ptrtoserverprocess*/}CINFO;/*cinfo*/typedefCINFO*PCINFO;typedefstruct_HDATAHDATA,*PHDATA;struct_HDATA{DWORD_1[2];/*00:linksforactivehandlelist*/HANDLEhValue;/*08:Currentvalueofhandle(nonce)*/DWORDlock;/*0C:accessinformation*/DWORDref;/*10:referenceinformation*/constCINFO*pci;/*14:ptrtoobjectclassdescriptionstructure*/PVOIDpvObj;/*18:ptrtoobject*/DWORDdwInfo;/*1C:extrahandleinfo*/};/*20:sizeof(HDATA)*/#ifdefx86structKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[4];ulonghandleBase;/*0x094baseaddressofhandletable*/};/*KDataStruct*/#endif#ifdefARMstructKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[6];ulonghandleBase;/*0x09chandletablebaseaddress*/};/*KDataStruct*/#endif#defineHandleToThread(h)((THREAD*)GetObjectPtrByType((h),SH_CURTHREAD))#defineHANDLE_ADDRESS_MASK0x1ffffffcvoidh2p(HANDLEh,PHDATA&phdRet){if((ulong)h<NUM_SYS_HANDLES+SYS_HANDLE_BASE&&(ulong)h=SYS_HANDLE_BASE)h=((KDataStruct*)PUserKData)-ahSys[(uint)h-SYS_HANDLE_BASE];if(h){phdRet=(PHDATA)(((ulong)h&HANDLE_ADDRESS_MASK)+((KDataStruct*)PUserKData)-handleBase);if(phdRet-hValue!=h)phdRet=0;}elsephdRet=0;}PVOIDGetObjectPtrByType(HANDLEh,
2023-07-25 16:47:021

access数据怎么导入到mysql数据库中

只要按那个SQL中的导入与导出就好,一步一步,不是很烦,大概只要几分鈡就好了
2023-07-25 16:47:133

Hacking Windows CE: 如何从线程ID获取线程名称

在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。因此无论在哪个操作系统上,获取线程名称是诊断线程相关问题的重要一步。从线程ID获取线程名称通常的方法是,先获取该线程的入口地址,然后枚举进程内所有已加载模块,最后判断线程入口地址落在哪个加载模块范围内。枚举 进程内已加载模块可用Win32标准的CreateToolhelp32Snapshot/Module32First/Module32Next系列 ToolHelp API得到。获取线程入口地址则没有线程的Win32 API可用。不过在Windows NT based操作系统上(包括Windows NT 4.0/2000/XP/2003,等),有一个未公开的Native API可用:NtQueryInformationThread。其声明如下:DWORDWINAPINtQueryInformationThread(HANDLEThreadHandle,THREAD_INFORMATION_CLASSThreadInformationClass,PVOIDThreadInformation,ULONGThreadInformationLength,PULONGReturnLength);获取线程入口地址可用:DWORDGetThreadStartAddress(DWORDdwThreadId){HANDLEhThread=OpenThread(THREAD_ALL_ACCESS,FALSE,dwThreadId);DWORDretaddr,len,error;retaddr=len=0;error=NtQueryInformationThread(hThread,9,&retaddr,sizeof(retaddr),&len);CloseHandle(hThread);if(error!=0)retaddr=0;returnretaddr;}在Windows CE上就没这么幸运了,没有任何现成的API可用。官方Windows CE Base Team的blog对这个问题的 回答是可以用Remote Kernel Tracker,不过这需要你build一个特殊的kernel image,enable一些profiler功能-这在显示的问题诊断中显然是不实际的。那么有没有办法不需要什么特殊的配置就可像Windows桌面 操作系统那样获得入口地址呢?有是有的,不过需要一些hack手段。仔细研究CE下的Thread内核数据结构,就会发现Thread结构中有一项是记录 线程入口地址的。typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/因此要做的就是想办法根据线程ID或handle得到这个数据。再研究,发现线程的Thread内核数据结构可通过句柄得到:PTHREADpTh=HandleToThread(ThreadHandle);而且,在Windows CE下,线程ID和其handle的值是一样的!!因此我们可以写一个这样的函数从线程ID拿到入口地址:DWORDGetThreadStartAddress(DWORDdwThreadId){DWORDdwStartAddress=0;BOOLfOldMode=SetKMode(TRUE);PTHREADpTh=HandleToThread((HANDLE)dwThreadId);if(pTh){dwStartAddress=(DWORD)MapPtrToProcess((LPVOID)pTh-dwStartAddr,pTh-pOwnerProc-hProc);}returndwStartAddress;}为了使用这些内核数据结构,我们还需要另外一些辅助结构和函数,比较完整的代码如下。当然,官方肯定是不建议这么做的,但是重要的是解决问题,你说呢。typedefstructProcess{DWORD_1[2];HANDLEhProc;/*08:handleforthisprocess,neededonlyforSC_GetProcFromPtr*/}PROCESS,*PPROCESS;typedefstructThread{DWORD_1[3];PPROCESSpProc;/*0C:pointertocurrentprocess*/PPROCESSpOwnerProc;/*10:pointertoownerprocess*/DWORD_2[18];DWORDdwStartAddr;/*5c:threadPCatcreation,usedtogetthreadname*/DWORD_3[10];}THREAD,*PTHREAD;/*Thread*/typedefstructcinfo{characName[4];/*00:objecttypeIDstring*/uchardisp;/*04:typeofdispatch*/uchartype;/*05:apihandletype*/ushortcMethods;/*06:#ofmethodsindispatchtable*/constPFNVOID*ppfnMethods;/*08:ptrtoarrayofmethods(inserveraddressspace)*/constDWORD*pdwSig;/*0C:ptrtoarrayofmethodsignatures*/PPROCESSpServer;/*10:ptrtoserverprocess*/}CINFO;/*cinfo*/typedefCINFO*PCINFO;typedefstruct_HDATAHDATA,*PHDATA;struct_HDATA{DWORD_1[2];/*00:linksforactivehandlelist*/HANDLEhValue;/*08:Currentvalueofhandle(nonce)*/DWORDlock;/*0C:accessinformation*/DWORDref;/*10:referenceinformation*/constCINFO*pci;/*14:ptrtoobjectclassdescriptionstructure*/PVOIDpvObj;/*18:ptrtoobject*/DWORDdwInfo;/*1C:extrahandleinfo*/};/*20:sizeof(HDATA)*/#ifdefx86structKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[4];ulonghandleBase;/*0x094baseaddressofhandletable*/};/*KDataStruct*/#endif#ifdefARMstructKDataStruct{LPDWORDlpvTls;/*0x000Currentthreadlocalstoragepointer*/HANDLEahSys[NUM_SYS_HANDLES];/*0x004Ifthismoves,changekapi.h*/DWORD_1[6];ulonghandleBase;/*0x09chandletablebaseaddress*/};/*KDataStruct*/#endif#defineHandleToThread(h)((THREAD*)GetObjectPtrByType((h),SH_CURTHREAD))#defineHANDLE_ADDRESS_MASK0x1ffffffcvoidh2p(HANDLEh,PHDATA&phdRet){if((ulong)h<NUM_SYS_HANDLES+SYS_HANDLE_BASE&&(ulong)h=SYS_HANDLE_BASE)h=((KDataStruct*)PUserKData)-ahSys[(uint)h-SYS_HANDLE_BASE];if(h){phdRet=(PHDATA)(((ulong)h&HANDLE_ADDRESS_MASK)+((KDataStruct*)PUserKData)-handleBase);if(phdRet-hValue!=h)phdRet=0;}elsephdRet=0;}PVOIDGetObjectPtrByType(HANDLEh,
2023-07-25 16:47:581

如何把Access中数据导入Mysql中

如何把Access中数据导入Mysql中1.打开Access程序,新建一个Access数据库。2.创建一个ODBC连接,点击【外部数据】-->【ODBC数据库】---->【通过链接表链接到数据源】。,可以选择“复制表”或“链接表”。链接表的好处是mysql数据源更新,Access链接数据表跟着更新,Access可以作为mysql数据库的界面。3.在弹出的界面,点击选项卡【机器数据源】---->【新建】,会弹出警示对话框,点击【确定】即可。4.在弹出的界面,点击【用户数据源】,点击【下一步】,在弹出的见面,选中【MySQL ODBC 5.2 Unicode Driver】,点击【完成】。5.这个步骤最为关键,是具体的数据链接源。Data source name:kdata(这是将这个连接命名,读者可以自己随便命名),TCP/IP server:localhost(本地数据库一般都是localhost),Port:3306(本地数据库一般都是3306这个接口)。
2023-07-25 16:48:081

地球在地球上有多少千克

由万有引力定律,M*G=g*R^2,M为地球质量,G为万能有引力常量,为6.67*(10^-11) N*m^2/kg^2,g为重力加速度,R为地球半径为6.4*10^3 km,即可求。M=(g*R^2)/G
2023-07-25 16:48:197

KF36u盘修复

你可以用量产U盘工具试试 方法百度下很多的
2023-07-25 16:48:451

求fortran程序,具体是在整数M到N之间,求与E的最大公约数为1的整数,只要一个,第一位就可以

2023-07-25 16:48:531