《Webservice的应用与开发》学习笔记 ·002【XML进阶、XML Schema】
注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971
文章目录
- 一、XML进阶
- 1、实体
- 2、处理指令
- 3、CDATA区段
- 4、注释
- 5、检验语法错误
- 6、名称空间
- 二、XML Schema
- 1、XML Schema文档
- 2、格式
- 3、XML引入XML Schema
- 4、数据类型
- (1).分类
- (2).常用内置基本数据类型
- (3).自定义简单数据类型
- [1].restriction
- [2].list
- [3].union
- 5、元素
- (1).简单元素
- [1].介绍
- [2].定义
- [3].示例
- (2).复杂元素
- [1].介绍
- [2].定义
- [3].元素顺序
- [4].属性
- [5].属性组
- [6].元素组
- 6、Schema复用
一、XML进阶
1、实体
实体即为表示一组特定含义的字符串,可以理解为转义字符
像是<
、>
、'
、"
、&
等XML的保留字,在作为文档数据时,就需要进行转义
在XML文档中,有5个预定义的实体引用:
字符 | 转义字符 |
---|---|
<
|
<
|
>
|
>
|
&
|
&
|
'
|
'
|
"
|
"
|
2、处理指令
处理指令是允许XML文档包含用于应用程序的指令,简称PI,其格式如下:
<?指令名 属性=属性值?>
XML声明就是处理指令,它的作用是对XML文档进行标识
3、CDATA区段
所有XML文档中的文本均会被解析器解析,所以元素内容出现了保留字需要转义(预定义实体引用)
但是如果文本很多,比如一段代码块,难免会出现很多需要转义的字符,如果逐个转义,不仅费力,而且费解,因此我们可以采用CDATA区段
只有CDATA区段中的文本会被解析器忽略,其格式如下:
<![CDATA[不希望被解析的内容]]>
例如:
<?xml version="1.0"?>
<function><![CDATA[insert(int x[10], pos, value) {if (pos < 0 || pos > 10)printf("Error!");else {for (int i = 10; i >= pos; i--)x[i] = x[i-1];x[pos] = value;}}]]>
</function>
4、注释
XML文档的注释格式如下:
<!-- 注释内容 -->
- XML文档的注释要注意以下规则:
- ① 注释不能出现在XML文档的第一行
-
② 注释可以出现在元素标记(
<
和>
)以外的任何地方 - ③ 注释不能嵌套注释
5、检验语法错误
可以用浏览器打开XML文档,如果存在错误则会报错,并指示错误处和错误类型
6、名称空间
有些时候标记会出现同名不同义的情况,极易造成含义混乱,比如TV的size和衬衫的size就不是一回事
为了体现前缀的唯一性,名称空间利用现在因特网上没有二义性的域名,规定前缀和某个URI连接在一起
名称空间允许XML文档中的每个元素和属性放在特定URI的不同名称空间中,例如:
<URI:size></URI:size>
名称空间中的URI只是一个逻辑概念,实际上不一定存在
为了具有唯一性,这个自定义的逻辑URI可以加一些自己的公司名称、环境,但是必须合法
名称空间声明主要包括两种形式{有前缀的名称空间没有前缀的名称空间\begin{cases} 有前缀的名称空间 \\ 没有前缀的名称空间 \end{cases}{有前缀的名称空间没有前缀的名称空间
- 有前缀的名称空间:
-
在XML文档中可以在XML元素的开始标记中、使用名称空间声明来声明命名空间,需要用到
xmlns
关键字<?xml version="1.0"?> <test xmlns:tv="http://www.njtech.edu.cn/goods/trousers"><my><tv:your></tv:your><its></its></my> </test>
可以在根元素、父元素、当前元素中进行名称空间声明
- 没有前缀的名称空间:
-
可以为一个XML文档声明一个默认名称空间,而无需为其指定前缀,所有没有前缀的元素默认属于此名称空间
<?xml version="1.0"?> <person xmlns="https://myst/js001"><name></name> </person>
二、XML Schema
1、XML Schema文档
XML Schema的作用和DTD一样,都是用于定义XML文档结构,并用于验证XML文档
2、格式
Schema文档本身也是XML文档,因此以XML声明开始
Schema文档需以xs:schema
为根元素,标志模式定义的开始
Schema文档的元素都在https://www.w3.org/2001/XMLSchema
名称空间中,因此必须在根元素上声明这个名称空间(通常是xs
或xsd
)
示例:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://mynamespace/my"><xs:element name="root" type="xs:string"/>
</xs:schema>
- 用
targetNamespace
属性声明本Schema文档定义的元素和数据类型属于哪一个名称空间(声明名称空间,需和XML文档中的目标名称空间一致) - 用
xs:element
元素声明一个在XML文档中使用的元素
▶ 属性name
指定元素的名字
▶ 属性type
指定元素的类型(元素内容的类型)
3、XML引入XML Schema
当XML引入XML Schema时,根据XML文档的元素是否属于某个特定的名称空间,可以按照以下两种方式引入:
-
不属于某个特定名称空间的——
xsi:noNamespaceSchemaLocation
- 示例:
-
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML Schema"> </root>
-
属性
xsi:noNamespaceSchemaLocation
为一个Schema文件的URI
-
属于某个特定名称空间的——
xsi:schemaLocation
- 示例:
-
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="[名称空间URI Schema文件路径]"> </root>
-
属性
xsi:schemaLocation
可同时引入多个Schema文件 - 每一个Schema文件的引入都需要一个名称空间URI和Schema文件路径,URI和Schema文件路径间用空格隔开
4、数据类型
(1).分类
Schema数据类型{简单类型{内置的数据类型{基本数据类型扩展数据类型用户自定义的数据类型复杂类型\begin{cases} 简单类型 \begin{cases} 内置的数据类型 \begin{cases} 基本数据类型 \\ 扩展数据类型 \end{cases} \\ 用户自定义的数据类型 \end{cases} \\ 复杂类型 \end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧简单类型⎩⎪⎨⎪⎧内置的数据类型{基本数据类型扩展数据类型用户自定义的数据类型复杂类型
如下图所示:
(2).常用内置基本数据类型
常用内置基本数据类型{字符串及相关类型{string表示字符串,原封不动保留所有空格QName表示一个包含XML命名空间在内的名称数值类型{decimal表示特定精度的数字float表示单精度32位浮点数,支持科学计数法double表示双精度64位浮点数,支持科学计数法hexBinary表示16进制数布尔类型——boolean:只支持true、false、0、1AnyUri类型——anyUri:表示一个URI用来定位文件时间类型{duration表示持续时间PnYnMnDTnHnMnS(P为起始定界符,T为分隔符)datetime表示特定的时间YYYY-MM-DDThh:mm:sstime表示特定的时间hh:mm:ss日期类型{date表示日期YYYY-MM-DD格式的时间gDay表示日期DD格式的时间gMonth表示日期MM格式的时间gMonthDay表示日期MM-DD格式的时间gYear表示日期YYYY格式的时间gYearMonth表示日期YYYY-MM格式的时间二进制数据类型{base64Binary表示任意base64编码的二进制数hexBinary表示任意16进制编码的二进制数Notation类型——NOTATION:表示XML中的NOTATION类型……\begin{cases} 字符串及相关类型 \begin{cases} \text{string} & 表示字符串,原封不动保留所有空格 \\ \text{QName} & 表示一个包含\text{XML}命名空间在内的名称 \end{cases} \\ \\ 数值类型 \begin{cases} \text{decimal} & 表示特定精度的数字 \\ \text{float} & 表示单精度32位浮点数,支持科学计数法 \\ \text{double} & 表示双精度64位浮点数,支持科学计数法 \\ \text{hexBinary} & 表示16进制数 \end{cases} \\ \\ 布尔类型——\text{boolean}:只支持\text{true、false}、0、1 \\ \\ \text{AnyUri}类型——\text{anyUri}:表示一个\text{URI}用来定位文件 \\ \\ 时间类型 \begin{cases} \text{duration} & 表示持续时间\text{PnYnMnDTnHnMnS(P为起始定界符,T为分隔符)} \\ \text{datetime} & 表示特定的时间\text{YYYY-MM-DDThh:mm:ss} \\ \text{time} & 表示特定的时间\text{hh:mm:ss} \end{cases} \\ \\ 日期类型 \begin{cases} \text{date} & 表示日期\text{YYYY-MM-DD}格式的时间 \\ \text{gDay} & 表示日期\text{DD}格式的时间 \\ \text{gMonth} & 表示日期\text{MM}格式的时间 \\ \text{gMonthDay} & 表示日期\text{MM-DD}格式的时间 \\ \text{gYear} & 表示日期\text{YYYY}格式的时间 \\ \text{gYearMonth} & 表示日期\text{YYYY-MM}格式的时间 \end{cases} \\ \\ 二进制数据类型 \begin{cases} \text{base64Binary} & 表示任意\text{base64}编码的二进制数 \\ \text{hexBinary} & 表示任意16进制编码的二进制数 \end{cases} \\ \\ \text{Notation}类型——\text{NOTATION}:表示\text{XML}中的\text{NOTATION}类型 \\ \\ …… \\ \end{cases}⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧字符串及相关类型{stringQName表示字符串,原封不动保留所有空格表示一个包含XML命名空间在内的名称数值类型⎩⎪⎪⎪⎨⎪⎪⎪⎧decimalfloatdoublehexBinary表示特定精度的数字表示单精度32位浮点数,支持科学计数法表示双精度64位浮点数,支持科学计数法表示16进制数布尔类型——boolean:只支持true、false、0、1AnyUri类型——anyUri:表示一个URI用来定位文件时间类型⎩⎪⎨⎪⎧durationdatetimetime表示持续时间PnYnMnDTnHnMnS(P为起始定界符,T为分隔符)表示特定的时间YYYY-MM-DDThh:mm:ss表示特定的时间hh:mm:ss日期类型⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧dategDaygMonthgMonthDaygYeargYearMonth表示日期YYYY-MM-DD格式的时间表示日期DD格式的时间表示日期MM格式的时间表示日期MM-DD格式的时间表示日期YYYY格式的时间表示日期YYYY-MM格式的时间二进制数据类型{base64BinaryhexBinary表示任意base64编码的二进制数表示任意16进制编码的二进制数Notation类型——NOTATION:表示XML中的NOTATION类型……
内置数据类型树状图如下图所示:
(3).自定义简单数据类型
在XML Schema文档中,可以用simpleType
元素定义一个简单数据类型
新定义的简单数据类型一般派生于已有的简单数据类型,可在simpleType
元素中添加如下子元素派生:
restriction
:限定一个范围、约束list
:从列表中选择(空格作为分隔符)union
:包含值的集合
[1].restriction
在xs:restriction
元素下,可以使用以下元素进行约束,从而派生出一个带有多种约束的新数据类型:
<xs:minInclusive value="最小值" />
指定临界最小值(包括边界)<xs:maxInclusive value="最大值" />
指定临界最大值(包括边界)<xs:minExclusive value="最小值" />
指定临界最小值(不包括边界)<xs:minExclusive value="最大值" />
指定临界最大值(不包括边界)<xs:fractionDigits value="小数位数">
定义数的小数部分位数<xs:totalDigits value="总位数">
定义数的总位数<xs:enumeration value="枚举值">
定义取值集合中的一个值<xs:pattern value="正则表达式">
指定字符串模式
示例:定义水的温度,最高小于100.00℃,最低大于0.00℃,小数位为2,数据类型WaterTemp
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="temperature" type="WaterTemp" /><xs:simpleType name="WaterTemp"><xs:restriction base="xs:decimal"><xs:fractionDigits value="2" /><xs:minExclusive value="0.00" /><xs:maxExclusive value="100.00" /></xs:restriction></xs:simpleType>
</xs:schema>
Tips:需要在<xs:restriction>
中用属性base
声明所约束的数据类型
[2].list
在xs:list
元素下,用itemType
属性指定列表元素类型,从而派生出一个指定元素类型的列表数据类型
在XML文档中引入时,需要元素内容需要以空格分隔
示例:定义一个string
类型的列表
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="stringvalues" type="valuelist" /><xs:simpleType name="valuelist"><xs:list itemType="xs:string" /></xs:simpleType>
</xs:schema>
[3].union
在xs:union
元素下定义多个xs:simpleType
的集合
示例:定义一个包含其它两个定义为枚举类型的简单元素集合
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:attribute name="allframesize"><xs:simpleType><xs:union><xs:simpleType><xs:restriction base="roadbikesize"/></xs:simpleType><xs:simpleType><xs:restriction base="mountainbikesize"/></xs:simpleType></xs:union></xs:simpleType></xs:attribute><xs:simpleType name="roadbikesize"><xs:restriction base="xs:positiveInteger"><xs:enumeration value="46"/><xs:enumeration value="52"/><xs:enumeration value="55"/></xs:restriction></xs:simpleType><xs:simpleType name="mountainbikesize"><xs:restriction base="xs:string"><xs:enumeration value="small"/><xs:enumeration value="medium"/><xs:enumeration value="large"/></xs:restriction></xs:simpleType>
</xs:schema>
5、元素
在XML Schema中定义好了相关的元素后,可以在XML文档中引入使用相关的元素
(1).简单元素
[1].介绍
简单元素只能包含字符数据,不能包含子元素、属性
示例:
<xs:element name="元素名称"
type="简单元素类型"
minOccurs="nonNegativeInteger"
maxOccurs="nonNegativeInteger|unbounded" />
其中
- 属性
minOccurs
、maxOccurs
分别指示元素出现的最小次数、最大次数 - 属性值
nonNegativeInteger
代表任意非负整数的集合 - 属性值
unbounded
代表元素出现次数不受限制
Tips:可以用xs:simpleType
元素下的xs:restriction
元素对简单元素加以限制
[2].定义
XML Schema中元素定义如下:
<xs:element name="elementName" type="elementType"/>
其中
- 属性
name
和type
为必填属性,分别指示元素名和元素类型 - 属性
fixed
和default
为可选属性,分别指示元素固定值和默认值
[3].示例
<!-- 水的沸点固定为100℃ -->
<xs:element name="Boil_temperature" type="xs:integer" fixed="100" /><!-- 图书数量默认为0 -->
<xs:element name="BookNumber" type="xs:integer" default="0" />
(2).复杂元素
[1].介绍
复杂元素指该元素具有属性和子元素,其数据类型为复杂数据类型
[2].定义
<xs:complexType name="自定义类型名称">定义子元素,定义属性
</xs:complexType>
[3].元素顺序
可以用以下标签来定义元素的顺序:
xs:all
:子元素可以以任意顺序书写xs:sequence
:{子元素必须以指定顺序书写每个子元素可以出现0次或任意次\begin{cases} 子元素必须以\textbf{指定顺序}书写 \\ 每个子元素可以出现0次或任意次 \end{cases}{子元素必须以指定顺序书写每个子元素可以出现0次或任意次xs:choice
:仅可包含一个声明的子元素
示例:
<!-- 任意顺序示例 -->
<xs:element name="BookInfo"><xs:complexType><xs:all><xs:element name="AuthorAge" type="xsd:positiveInteger" /><xs:element name="AuthorName" type="xsd:string" /></xs:all></xs:complexType>
</xs:element><!-- 选择顺序示例 -->
<xs:element name="Tel"><xs:complexType><xs:choice><xs:element name="Office" type="xsd:string" /><xs:element name="Mobile" type="xsd:string" /></xs:choice></xs:complexType>
</xsd:element>
[4].属性
定义属性的格式如下:
<xs:attribute name="attribute_name" | ref="attribute_name"
type="data_type_name"
use="value" />
其中
- XML Schema中,可能存在两个不同元素具有相同的属性,因而一个
xs:attribute
元素name
所声明的属性,可在另一个xs:attribute
中通过ref
进行引用 use
选项取值{optional默认值,定义的属性可以出现在XML文档中,也可以不出现在XML文档中required定义的属性必须出现在XML文档中prohibited定义的属性不能出现在XML文档中\begin{cases} \text{optional} & 默认值,定义的属性可以出现在\text{XML}文档中,也可以不出现在\text{XML}文档中 \\ \text{required} & 定义的属性必须出现在\text{XML}文档中 \\ \text{prohibited} & 定义的属性不能出现在\text{XML}文档中 \end{cases}⎩⎪⎨⎪⎧optionalrequiredprohibited默认值,定义的属性可以出现在XML文档中,也可以不出现在XML文档中定义的属性必须出现在XML文档中定义的属性不能出现在XML文档中- 其他属性{default:该属性具有默认值——若XML文档的元素没有这个属性,则自动插入该属性并设置默认值fixed:该属性具有固定值——{若验证器发现该属性,则验证其属性值和固定值是否相同,若不相同则报错若验证器没有发现该属性,则自动插入该属性并设置固定值\begin{cases} \text{default}:该属性具有默认值——若\text{XML}文档的元素没有这个属性,则自动插入该属性并设置默认值 \\ \\ \text{fixed}:该属性具有固定值—— \begin{cases} 若验证器发现该属性,则验证其属性值和固定值是否相同,若不相同则报错 \\ 若验证器没有发现该属性,则自动插入该属性并设置固定值 \end{cases} \end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧default:该属性具有默认值——若XML文档的元素没有这个属性,则自动插入该属性并设置默认值fixed:该属性具有固定值——{若验证器发现该属性,则验证其属性值和固定值是否相同,若不相同则报错若验证器没有发现该属性,则自动插入该属性并设置固定值
- 属性
name
和ref
、属性default
和fixed
不能同时出现
示例:
<!-- 包含属性的空元素示例 -->
<xs:element name="BookName"><xs:complexType><xs:sequence /><xs:attribute name="ISBN" type="ISBNType" /></xs:complexType>
</xs:element><xs:simpleType name="ISBNType"><xs:restriction base="xs:string"><xs:pattern value="\d{1}-\d{4}-\d{4}-\d{1}/TP\d{4}" /></xs:restriction>
</xs:simpleType>
[5].属性组
可以把一组属性组合在一起,以便一起被引用
属性有name
和ref
示例:
<!-- 属性组示例 -->
<xs:attributeGroup name="myAttributeGroup"><xs:attribute name="attribute1" type="xs:integer" /><xs:attribute name="attribute2" type="xs:string" />
</xs:attributeGroup><xs:complexType name="myElementType"><xs:attributeGroup ref="myAttributeGroup" />
</xs:complexType>
[6].元素组
可以把一组元素组合在一起
必须在group
内部定义一个all
、choice
、sequence
元素
示例:
<!-- 元素组示例 -->
<xs:group name="PersonGroup"><xs:sequence><xs:element name="FirstName" type="xs:string" /><xs:element name="LastName" type="xs:string" /><xs:element name="Birthday" type="xs:date" /></xs:sequence>
</xs:group><xs:element name="Person" type="PersonInfo"/><xs:complexType name="PersonInfo"><xs:sequence><xs:group ref="PersonGroup"/><xs:element name="Country" type="xs:string"/></xs:sequence>
</xs:complexType>
6、Schema复用
在一个文档中引入其他Schema文档,具体标记包括:
-
include
- 被包含的文件可以不属于任何名称空间
- 如果包含名称空间,该名称空间必须与包含文件的名称空间保持一致
-
语法格式如下:
<include schemaLocation="被包含的 Schema 的文件" />
-
示例:
- Prototype.xsd文件
<schema xmlns="http://www.w3.org/2001/xmlschema" targetNamespace="www.example.com/purchase"><simpleType name="prString"><restriction base="string"><pattern value="[p]{1}\d{3}" /></restriction></simpleType> </schema>
- PurchaseOrder.xsd文件
<schema xmlns="http://www.w3.org/2001/xmlschema" targetNamespace="www.example.com/purchase"><include xmlns:prd="www.example.com/purchase" /><element name="prod" type="prd:prString" /> </schema>
- Prototype.xsd文件
-
import
- 元素专门用于复用不同名称空间的
- 被导入的Schema文档必须与当前文件定一不同的名称空间
-
语法格式如下:
<import schemaLocation="被包含的 Schema 的文件" [namespace="被包含的 Schema 文件的名称空间"]/>
-
示例:
<schema targetNamespace="http://202.117.84.144" xmlns:xs="http://202.117.84.144" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:a="http://202.117.84.228/SqlServer228" xmlns:b="http://202.117.84.228/Oracle144" elementFormDefault="qualified"><import namespace="http://202.117.84.228/SqlServer228"schemaLocation="F:\SqlServer228.xsd" /><import namespace="http://202.117.84.228/Oracle144"schemaLocation="F:\Orcale20211784144.xsd" />... </schema>
《Webservice的应用与开发》学习笔记 ·002【XML进阶、XML Schema】相关推荐
- Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作
Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作 移动/交换对象的顺序 移动对象的顺序 TREEVIEW FEATURE MOVE ( 1,2 ) 将索引号为1和2的特征交换位置 T ...
- ArcGIS客户端开发学习笔记(二)——XML
XML是Extensible Markup Language(可扩展标记语言)的简称.XML是一种以简单文本格式存储数据的方式,这意味着它可以被任何计算机读取.XML是在Internet上传书数据的绝 ...
- ios开发学习笔记--Core Motion
iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一. 简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...
- 高性能Cordova App开发学习笔记
高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...
- Windows驱动开发学习笔记(七)—— 多核同步内核重载
Windows驱动开发学习笔记(七)-- 多核同步 基础知识 并发与同步 分析 InterlockedIncrement 原子操作相关API 内核文件 多核同步 临界区 示例一:错误的临界区 示例二: ...
- Windows驱动开发学习笔记(六)—— Inline HOOK
Windows驱动开发学习笔记(六)-- Inline HOOK SSDT HOOK Inline Hook 挂钩 执行流程 脱钩 实验一:3环 Inline Hook 实验二:0环 Inline H ...
- Windows驱动开发学习笔记(五)—— SSDT HOOK
Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...
- Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...
- Windows驱动开发学习笔记(三)—— 内核空间内核模块
Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...
- Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础
Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...
最新文章
- hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
- Mac android studio升级时提示 :Connection failed. Please check your network connection .
- Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated) D. Kuroni and the Celebration 交互 + 思维
- [CEOI2016] kangaroo(排列dp)
- 做到这几点,让你离高级程序员更近一步!
- 子查询到底走不走索引?
- 在三个层次对Asp.Net的数据操作进行事务
- TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(二)
- 自定义SSL证书实现单双向ssl认证记录
- 集群ddos_《DNS攻击防范科普系列2》 -DNS服务器怎么防DDoS攻击
- WPF视频教程系列笔记
- 开源java微博系统_ThinkSNS 开源微博系统 v4.6.0.0
- 企业—pacemaker基本概念及其原理
- 程序设计方法学作业—三天打渔两天晒网程序设计
- python 爬虫小案例 8684网站爬取北京公交路线站点信息。
- 世界互联网大会为什么把这么重要的奖颁给蚂蚁金服?
- App和小程序开发成本对比
- Byval 和 Byref的区别
- wireshark抓组播数据_wireshark过滤?wireshark 看端口号?wireshark组播包?WireShark 过滤语法...
- Oracle 11g grid 日志的目录结构
热门文章
- 电力企业计量生产运行系统总体解决方案
- oracle如何取当前日期年月_Oracle获取当前年、月、日的方法
- java setstate,5.state更新流程(setState里到底发生了什么)
- mysql免安装版配置百度_mysql -5.7.10 免安装版配置
- c语言中整型数组如何初始化,C语言数组空间的初始化详解
- Wow! Such City! 最短路问题
- 数据结构(字符串)—— 删除“b“和“ac“
- 协作开发——使用git在多台机器上实现协作开发
- Jupyter Lab——如何添加没有出现的kernel
- spring配置属性的两种方式