今日:0
文章:81
今日:0
文章:29
今日:0
文章:57
今日:0
文章:98
今日:0
文章:12
今日:0
文章:19
今日:0
文章:0

4385
在安装Android-x86后,由于nVidia显卡驱动的原因启动过程中可能会卡住无法进入图形界面。此时在需要在启动参数中添加nomodeset选项来禁用显卡。其他Linux系统中遇到同样的问题也可以使用此方法解决。 产生原因The newest kernels have moved the video mode setting into the kernel. So all the programming
of the hardware specific clock rates and registers on the video card happen in the kernel
rather than in the X driver when the X server starts.. This makes it possible to have high
resolution nice looking splash (boot) screens and flicker free transitions from boot splash
to login screen. Unfortunately, on some cards this doesnt work properly and you end up with
a black screen. Adding the nomodeset parameter instructs the kernel to not load video drivers
and use BIOS modes instead until X is loaded. 某些显卡下Linux内核无法正常工作导致黑屏。 解决方法 方法一:开机后在grub界面选择第二项Debug mode,输入mount –o remount,rw /mnt
再输入vi /mnt/grub/menu.lst
在第七行的root前加入quiet nomodeset,修改后内容如下:title Android-x86 8.1-r5
kernel /android-8. 1-r5/kernel quiet nomodeset root=/dev/ram0 SRC=/android-8. 1-r5
initrd /android-8. 1-r5/ initrd. img 按ESC退出编辑,并输入:wq保存退出。 重启后即可进入图形界面。 方法二:开机进入GRUB界面,直接按键盘E键,然后又会进入一个新的选择界面,不用理会,接着按键盘E键。接着会进入到一个可以编辑的界面,只有一行字符串,然后找到 quiet root字符串,将其增加一个nomodeset,然后回车,按B键,然后自动进入图形界面。 缺点是每次启动都要进行该操作。

1553
<?php
error_reporting(0);
$path=date(‘Ym’);
if (!file_exists($path))
{
mkdir($path, 0777);
}
$pathurl = $path.’/’.date(‘d’).’.jpg’;
if (!is_file($pathurl))
{
$str=file_get_contents(‘https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1′);
if (preg_match(“/<urlBase>(.+?)<\/urlBase>/ies”, $str, $matches))
{
$imgurl=’https://s.cn.bing.com’.$matches[1].’_1920x1080.jpg’;
copy($imgurl, $pathurl);
}
}
header(‘Content-Type: image/JPEG’);
@ob_end_clean();
@readfile($pathurl);
@flush();
@ob_flush();
exit();
?>

1329
百度网上大多数关于建立Mysql 索引的内容,都是只有简单的几条命令,对于第一次使用的人非常容易造成一头雾水,经过多番查找,总算找到一篇比较完整的关于如何建立的索引的文章原文转自:索引(一)Mysql创建索引 - 漫天飞羽 - 博客园 (cnblogs.com)这篇文章,主要是和大家一起去了解索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。一、先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么,想找到Bob Cat的电话号码,另外我们知道电话簿中名字是按照字母顺序排列的,所以首先要查找姓氏为Cat的页面,然后在这个页面下查找名字为Bob的电话号码。 那如果在电话薄中的名字没有按照字母排列,就需要去浏览所有的页,然后在里面查找每个姓名直到找到Bob Cat,这种是查找了所有的电话页,所以在时间上还是挺费时的。 那我们将电话簿与数据库表联系起来,如果有一个电话簿表然后要找到Bob Cat的电话号码,则可以执行以下查询: SELECT
phone_number
FROM
phone_book
WHERE
first_name = 'Bob' AND
last_name = 'Cat'; 这个写起来很容易,在数据量不大的时候查询速度很快,但数据库必须扫描表的所有行,直到找到该行为止,如果表有数百万行而没有索引时,则检索数据会耗费很多的时间。二、索引的介绍 索引是一种数据结构,例如B-Tree,这种数据结构是需要额外的写入和存储为代价来提高表上数据检索的速度。一旦建立了索引后,数据库中查询优化器使用索引来快速定位数据,然后就无需扫描表中给定查询的每一行了。 其中。当使用主键或唯一键创建表时,MySQL会自动创建名为PRIMARY的特殊索引, 该索引称为聚簇索引。PRIMARY索引是比较特殊的,这个索引本身与数据一起存储在同一个表中。另外除PRIMARY索引之外的其他索引称为二级索引或非聚簇索引。三、MySQL CREATE INDEX语句 通常,创建表的时候就能为表创建索引。 例如,以下语句创建一个新表,并创建了是由两列c2和c3组成的索引。CREATE TABLE t(
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
c3 INT NOT NULL,
c4 VARCHAR(10),
INDEX (c2,c3)
); 但是要为列或一组列添加索引,可以使用CREATE INDEX语句,如下所示:CREATE INDEX index_name ON table_name (column_list) 要为列创建索引,要指定索引名称,索引所属的表以及列。 例如,要为列c4添加新索引,请使用以下语句:CREATE INDEX idx_c4 ON t(c4); 默认情况下,如果未指定索引类型,MySQL将创建B-Tree索引。 以下显示了基于表的存储引擎的允许索引类型: 四、MySQL CREATE INDEX 举例 以下语句查找职位为Sales Rep的员工:SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
jobTitle = 'Sales Rep'; 这里数据返回了17行,表明17名员工的职位是销售代表。 那我们要查看MySQL如何在内部执行此查询,可以在SELECT语句的开头添加EXPLAIN子句,会得到下面的结果: 可以看到,MySQL必须扫描包含23行的整个表,以查找具有Sales Rep职位的员工。 现在,让我们使用CREATE INDEX语句为jobTitle列创建一个索引:CREATE INDEX jobTitle ON employees(jobTitle); 并再次执行上述语句: EXPLAIN SELECT
employeeNumber,
lastName,
firstName
FROM
employees
WHERE
jobTitle = 'Sales Rep'; 这时候看到,MySQL只需要在键列中指示的jobTitle索引中找到17行而不扫描整个表。 如果要显示表的索引,可以使用下SHOW INDEXES语句,例如: SHOW INDEXES FROM employees; 返回结果如下的索引五、可能遇到的问题 在创建过程中,我们可能会遇到“BLOB/TEXT column 'xxx' used in key specification without a key length”这样的报错 错误产生原因:查阅资料后才知道,原来Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符。所以这样的数据类型不能作为主键,也不能是UNIQUE的。所以要换成VARCHAR,但是VARCHAR类型的大小也不能大于255,当VARCHAR类型的字段大小如果大于255的时候也会转换成小的TEXT来处理。所以也同样有问题。 解决方案:知道原因就好解决了,首先我们查看该表结构,发现对应报错字段为Text,那么我们只需要将其修改为varchar,然后后面对应的长度根据情况进行设置,比如站长这里,由于该值最大也不会超过100,故设置最大长度为100即可 此时再去执行创建命令,发现已经可以执行成功了





1839
问题描述:关闭word时,显示:由于文件许可错误word无法完成保存解决方案:出现这种提示可能是因为文件是由其他版本的word软件创建的,和当前使用的word版本不一致;
我们可以将文件另存为,随后再更改文件名进行保存。具体操作步骤如下:
1、word之所以许可权错误,是因为文件是由其他版本的word软件创建的,与您当前使用的word版本不一致,
所以无法保存在原来的文件里;
2、点击左上角的【文件】按钮,然后在下方选项【另存为】;
3、在文件名上新加一个1与此前的源文件所区别开,此外同样的文件名字也是保存不了的,然后点【保存】按钮;
4、退出word,将源文件删除,然后右键点击新建的文档,选择【重命名】,将后面的1删除即可回车保存。

3428
原内容摘自:装了Office2013 保存大文档时,进度太慢,有什么解决的办法吗 (microsoft.com)在Office 2013及以上版本,当我们的电脑配置比较高的时候,有时候会发现在保存大文件的时候,进度异常缓慢,甚至卡死,那么这种情况该怎么解决呢?在查阅微软官方技术论坛后,找到解决方案方法一:禁用 Office 中的允许后台保存(禁止这个功能可能存在一些风险, 请及时保存文件。)
启动任一 Office 2013 程序。
在“文件”选项卡上,单击“选项”。
在“选项”对话框中,单击“高级”。
在可用选项列表中,单击取消“允许后台保存”复选框。
方法二:禁用 Office 中的硬件加速
启动任一 Office 2013 程序。
在“文件”选项卡上,单击“选项”。
在“选项”对话框中,单击“高级”。
在可用选项列表中,单击选中“禁用硬件图形加速”复选框。



2664
症状:系统异常卡,通过查看任务管理器发现CPU频率被锁定在0.39Ghz排查思路:1.检查“控制面板 -> 电源设置”中,此时的电源管理模式是否为高性能或者当前性能下是否针对CPU设置了最大能源比例,具体为:“控制面板 - > 电源选项 - > 编辑计划设置 - > 更改高级电源设置”2.如果上述设置不存在问题,则需要尝试重启,进入BIOS,恢复出厂设置,然后再次进入系统查看是否能解决3.如果在查看了电源管理选项、恢复BIOS仍不能解决,请检查CPU是否散热良好,过热也可能导致CPU被强制锁定频率4.如果上述均无问题,那么则需要考虑是否有可能是系统驱动异常导致的CPU被锁频率,具体测试方法为:进入PE,然后运行CPU-Z,如果核心速度为正常情况,则说明是由于系统驱动层面导致的,该情况下,则需要排查出是哪个驱动导致,然后尝试恢复或者卸载该驱动



8207
故障原因:定影温度检测异常解决方案:1.检查定影组件线路是否正常,例如是否有线因为螺丝或者其他原因有断的,如果有需要先进行恢复 2.进入设备维修模式: (1). 按黄色的清除键, (2). 按键“1”“0”“7”, (3). 按红色的“Clear/Stop”键(按住3秒), (4). 关机,然后重新开机,一般即可恢复正常 (*5). 部分机型可能还需要在维修模式下输入801进行清除状态 3.上述如果仍不能解决问题,则需要尝试清洁热敏电阻上的积碳或者更换热敏电阻

1504

4637
转自:Windows 10 自带那么多图标,去哪里找呢?_walter lv的博客-CSDN博客_windows图标提取的ICON下载:点击下载大家都知道在文件夹上右键,选择 属性 → 自定义 → 更改图标,这里可以选择很多图标,但用了很多年看腻了,Windows 10 中还自带有那么多,它们又在哪里呢?Windows XP/2003 自带的图标几乎都在 %systemroot\system32\*.dll 中Windows 7/10/11 自带的图标几乎都在 %systemroot\SystemResources\*.mun 中,部分在 %systemroot\system32\*.dll 中Windows 10 风格%systemroot\system32\ddores.dll
%systemroot\system32\dmdskres.dll
%systemroot\system32\imageres.dll
%systemroot\system32\mmres.dll
%systemroot\system32\networkexplorer.dll
%systemroot%\system32\pnidui.dll
%systemroot%\system32\sensorscpl.dll
%systemroot%\system32\setupapi.dll
%systemroot%\system32\shell32.dll
%systemroot%\system32\wmploc.dll
%systemroot%\system32\wpdshext.dllWindows 7 风格%systemroot\system32\accessibilitycpl.dll
%systemroot\system32\dsuiext.dll
%systemroot\system32\gameux.dll
%systemroot\system32\ieframe.dll
%systemroot\system32\mstscax.dll
%systemroot\system32\netcenter.dllWindows 早期风格%systemroot\system32\compstui.dll
%systemroot\system32\mmcndmgr.dll
%systemroot\system32\moricons.dll
%systemroot\system32\pifmgr.dllWindows 10 风格▲ ddores.dll 包含各种硬件图标▲ dmdskres.dll 磁盘管理所用图标▲ imageres.dll 各种各样 Windows 10 风格的图标,涵盖各种用途▲ mmres.dll 音频设备图标▲ networkexplorer.dll 网络和共享中心图标▲ pnidui.dll 不要被这些空白迷惑了,这都是白色的网络指示图标(有线、无线、飞行模式等)▲ sensorscpl.dll 各种传感器图标(如温度、亮度、声音、指纹、地理位置等)▲ setupapi.dll 为各种硬件安装程序提供的图标▲ shell32.dll 这个是点开“更改图标”按钮后查看的默认图标库,也包含各种各样 Windows 10 风格的图标,涵盖各种用途▲ wmploc.dll 各种媒体设备、媒体文件、媒体文件夹▲ wpdshext.dllWindows 7/Vista 风格▲ accessibilitycpl.dll 辅助功能图标▲ dsuiext.dll 服务器或网络服务所用图标▲ ieframe.dll IE 所用的图标(部分图标其实已经更新成 Windows 10 风格,给 Edge 用)▲ mstscax.dll 远程桌面连接所用图标(部分图标其实已经更新成 Windows 10 风格)▲ netcenter.dll Windows 7 风格的网络和共享中心所用图标Windows XP/2000/9X/3.X 风格▲ compstui.dll▲ mmcndmgr.dll 古老的图标▲ moricons.dll 古老的图标▲ netshell.dll 古老的网络连接图标▲ pifmgr.dll Windows 95 时代古老的图标▲ wiashext.dll 各种图片、照片和媒体设备图标一个说明:你会发现有些图标是空白的,这个不是 BUG,是微软的无奈……因为有些古老的不负责任的程序会依赖于这些老旧的被微软淘汰的图标,如果微软删掉了这些图标,那么这些程序会崩溃。哎……





2263
转自:Windows PnP设备驱动删除设备的处理流程 - 知乎 (zhihu.com)参考文档:Understanding When Remove IRPs Are Issued - Windows drivers / 让设备实现即插即用--福优学苑@音视频+流媒体 (hellotongtong.com)Windows对于PnP(即插即用)设备,有一个专门的IRP Major Code定义:IRP_MJ_PNP,任何PnP设备驱动以及工作在PnP设备协议栈之上的驱动(如文件系统驱动)和过滤驱动都需要处理IRP_MJ_PNP请求,尤其是删除的过程,如果驱动没有针对这类请求进行处理,可能会导致系统挂起或者删除设备失败。一个常见的用户层面表现就是无法安全弹出U盘。本文主要翻译自前面的链接,不保证内容一定正确(未进行完整验证)。PnP设备有两种删除流程,一种是正常删除,也就是用户层面发起的“安全弹出”请求;另一种是用户直接拔出设备,这种是非正常删除。对于正常安全删除的流程:Windows会先发起一个IRP_MN_QUERY_REMOVE_DEVICE请求,去查询设备是否可以正常删除,如果此时设备忙,则可以通过Irp->IoStatus.Status返回一个STATUS_UNSUCCESSFUL,同时调用IoCompleteRequest,并且不传播Irp给下层驱动。这样在用户层面上,就会提示设备忙,无法删除。如果驱动认为设备时可以删除的,那么收到此请求以后,就应该禁止新的其它请求进入,同时设置Irp->IoStatus.Status为STATUS_SUCCESS,并调用IoSkipCurrentIrpStackLocation和IoCallDriver传播这个Irp到更底层的设备。通常来说,如果这个请求返回成功,那么驱动此时就应该释放一些资源,当然驱动也可以选择不释放,而是仅仅阻止更多的请求进入,具体驱动选择哪种行为,由驱动自己决定,但通常情况下,对设备加锁是必需的,也要阻止任何“创建”类型的请求进入驱动。当IRP_MN_QUERY_REMOVE_DEVICE返回成功,并且整个设备栈上的所有驱动都返回成功时,Windows的PnP管理器会发送IRP_MN_REMOVE_DEVICE请求,完成对设备彻底删除,当收到IRP_MN_REMOVE_DEVICE请求时,驱动需要释放全部资源,关闭设备,停止还在执行中的其它Irp请求。同时,驱动也要传播这个请求到下层驱动。Windows文档中要求:IRP_MN_REMOVE_DEVICE请求是必须成功的,不能失败,否则可能会造成设备状态信息不一致。IRP_MN_REMOVE_DEVICE请求有可能是驱动被卸载前的最后一个请求,所以必须要保证所有资源被正确释放。如果IRP_MN_QUERY_REMOVE_DEVICE返回失败,那么Windows会重新发送一个IRP_MN_CANCEL_REMOVE_DEVICE请求通知驱动以及整个设备栈取消之前的请求。当驱动收到IRP_MN_CANCEL_REMOVE_DEVICE时,需要解开设备锁定的状态,并允许“创建”类型的请求进入驱动。类似地,IRP_MN_CANCEL_REMOVE_DEVICE也要被传播到底层驱动,通知底层设备驱动更新状态。还有一种特例是,虽然IRP_MN_QUERY_REMOVE_DEVICE返回成功,但上层代码改变主意,不希望删除设备,那么也会发送一个IRP_MN_CANCEL_REMOVE_DEVICE请求,对于这个请求的处理跟前面描述的是一致的:更新状态,传播Irp到底层。所以大致的流程图如下IRP_MN_QUERY_REMOVE_DEVICE(查询是否可以删除)
|
+-----(失败)---> IRP_MN_CANCEL_REMOVE_DEVICE
|
+-----(用户层面取消请求)---> IRP_MN_CANCEL_REMOVE_DEVICE
|
(成功)
v
IRP_MN_REMOVE_DEVICE (可能是最后一个IRP)对于非正常拔出设备的删除流程:Windows PnP管理器会发送一个IRP_MN_SURPRISE_REMOVAL请求给驱动,通知驱动这个设备已经被强制删除了。这个时候驱动需要做的事情如下:1. 检查设备是否还存在,如果还存在,需要停止并删除设备(笔者注:这段状态很奇怪,但文档里是这么写的)2. 释放全部资源,阻止新的IO请求。3. 除了IRP_MJ_CLEANUP,IRP_MJ_CLOSE,IRP_MJ_POWER,IRP_MJ_PNP之外,其它IRP都需要被阻止。4. 如果过滤驱动不能处理这个请求,向底层传播。5. 设置Irp->IoStatus.Status为STATUS_SUCCESS,必须成功,不能失败。6. 调用IoSkipCurrentIrpStackLocation和IoCallDriver传播IRP7. 通过IoCallDriver获得返回值并返回IRP dispatch函数8. 不要调用任何Complete函数当IRP_MN_SURPRISE_REMOVAL请求返回以后,Windows会继续发送一个IRP_MN_REMOVE_DEVICE完成设备删除,流程与正常安全移除设备的方式一致。=============================================================================附注:一、即插即用IRP表二、启动与停止代码#pragma PAGEDCODE
NTSTATUS HandleStartDevice(PDEVICE_EXTENSION pdx, PIRP Irp)
{
PAGED_CODE();
KdPrint(("Enter HandleStartDevice\n"));
//转发IRP并等待返回
NTSTATUS status = ForwardAndWait(pdx,Irp);
if (!NT_SUCCESS(status))
{
Irp->IoStatus.Status = status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
//得到当前堆栈
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
//从当前堆栈得到资源信息
PCM_PARTIAL_RESOURCE_LIST raw;
if (stack->Parameters.StartDevice.AllocatedResources)
raw = &stack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList;
else
raw = NULL;
KdPrint(("Show raw resouces\n"));
ShowResources(raw);
//从当前堆栈得到翻译信息
PCM_PARTIAL_RESOURCE_LIST translated;
if (stack->Parameters.StartDevice.AllocatedResourcesTranslated)
translated = &stack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList;
else
translated = NULL;
KdPrint(("Show translated resouces\n"));
ShowResources(translated);
//完成IRP
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
KdPrint(("Leave HandleStartDevice\n"));
return status;
}
#pragma PAGEDCODE
NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo,
IN PIRP Irp)
{
PAGED_CODE();
KdPrint(("Enter HelloWDMPnp\n"));
NTSTATUS status = STATUS_SUCCESS;
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
static NTSTATUS (*fcntab[])(PDEVICE_EXTENSION pdx, PIRP Irp) =
{
HandleStartDevice,// IRP_MN_START_DEVICE
DefaultPnpHandler,// IRP_MN_QUERY_REMOVE_DEVICE
HandleRemoveDevice,// IRP_MN_REMOVE_DEVICE
DefaultPnpHandler,// IRP_MN_CANCEL_REMOVE_DEVICE
DefaultPnpHandler,// IRP_MN_STOP_DEVICE
DefaultPnpHandler,// IRP_MN_QUERY_STOP_DEVICE
DefaultPnpHandler,// IRP_MN_CANCEL_STOP_DEVICE
DefaultPnpHandler,// IRP_MN_QUERY_DEVICE_RELATIONS
DefaultPnpHandler,// IRP_MN_QUERY_INTERFACE
DefaultPnpHandler,// IRP_MN_QUERY_CAPABILITIES
DefaultPnpHandler,// IRP_MN_QUERY_RESOURCES
DefaultPnpHandler,// IRP_MN_QUERY_RESOURCE_REQUIREMENTS
DefaultPnpHandler,// IRP_MN_QUERY_DEVICE_TEXT
DefaultPnpHandler,// IRP_MN_FILTER_RESOURCE_REQUIREMENTS
DefaultPnpHandler,//
DefaultPnpHandler,// IRP_MN_READ_CONFIG
DefaultPnpHandler,// IRP_MN_WRITE_CONFIG
DefaultPnpHandler,// IRP_MN_EJECT
DefaultPnpHandler,// IRP_MN_SET_LOCK
DefaultPnpHandler,// IRP_MN_QUERY_ID
DefaultPnpHandler,// IRP_MN_QUERY_PNP_DEVICE_STATE
DefaultPnpHandler,// IRP_MN_QUERY_BUS_INFORMATION
DefaultPnpHandler,// IRP_MN_DEVICE_USAGE_NOTIFICATION
DefaultPnpHandler,// IRP_MN_SURPRISE_REMOVAL
};
ULONG fcn = stack->MinorFunction;
if (fcn >= arraysize(fcntab))
{// 未知的子功能代码
status = DefaultPnpHandler(pdx, Irp); // some function we don't know about
return status;
}
#if DBG
static char* fcnname[] =
{
"IRP_MN_START_DEVICE",
"IRP_MN_QUERY_REMOVE_DEVICE",
"IRP_MN_REMOVE_DEVICE",
"IRP_MN_CANCEL_REMOVE_DEVICE",
"IRP_MN_STOP_DEVICE",
"IRP_MN_QUERY_STOP_DEVICE",
"IRP_MN_CANCEL_STOP_DEVICE",
"IRP_MN_QUERY_DEVICE_RELATIONS",
"IRP_MN_QUERY_INTERFACE",
"IRP_MN_QUERY_CAPABILITIES",
"IRP_MN_QUERY_RESOURCES",
"IRP_MN_QUERY_RESOURCE_REQUIREMENTS",
"IRP_MN_QUERY_DEVICE_TEXT",
"IRP_MN_FILTER_RESOURCE_REQUIREMENTS",
"",
"IRP_MN_READ_CONFIG",
"IRP_MN_WRITE_CONFIG",
"IRP_MN_EJECT",
"IRP_MN_SET_LOCK",
"IRP_MN_QUERY_ID",
"IRP_MN_QUERY_PNP_DEVICE_STATE",
"IRP_MN_QUERY_BUS_INFORMATION",
"IRP_MN_DEVICE_USAGE_NOTIFICATION",
"IRP_MN_SURPRISE_REMOVAL",
};
KdPrint(("PNP Request (%s)\n", fcnname[fcn]));
#endif // DBG
status = (*fcntab[fcn])(pdx, Irp);
KdPrint(("Leave HelloWDMPnp\n"));
return status;
}三、设备资源#pragma PAGEDCODE
VOID ShowResources(IN PCM_PARTIAL_RESOURCE_LIST list)
{
//枚举资源
PCM_PARTIAL_RESOURCE_DESCRIPTOR resource = list->PartialDescriptors;
ULONG nres = list->Count;
ULONG i;
for (i = 0; i < nres; ++i, ++resource)
{// for each resource
ULONG type = resource->Type;
static char* name[] = {
"CmResourceTypeNull",
"CmResourceTypePort",
"CmResourceTypeInterrupt",
"CmResourceTypeMemory",
"CmResourceTypeDma",
"CmResourceTypeDeviceSpecific",
"CmResourceTypeBusNumber",
"CmResourceTypeDevicePrivate",
"CmResourceTypeAssignedResource",
"CmResourceTypeSubAllocateFrom",
};
KdPrint((" type %s", type < arraysize(name) ? name[type] : "unknown"));
switch (type)
{// select on resource type
case CmResourceTypePort:
case CmResourceTypeMemory:
KdPrint((" start %8X%8.8lX length %X\n",
resource->u.Port.Start.HighPart, resource->u.Port.Start.LowPart,
resource->u.Port.Length));
break;
case CmResourceTypeInterrupt:
KdPrint((" level %X, vector %X, affinity %X\n",
resource->u.Interrupt.Level, resource->u.Interrupt.Vector,
resource->u.Interrupt.Affinity));
break;
case CmResourceTypeDma:
KdPrint((" channel %d, port %X\n",
resource->u.Dma.Channel, resource->u.Dma.Port));
}// select on resource type
}// for each resource
}// ShowResources
