diff --git "a/labs/2020302111091-\350\265\265\345\255\220\346\230\202-\345\256\236\351\252\214\346\212\245\345\221\212.doc" "b/labs/2020302111091-\350\265\265\345\255\220\346\230\202-\345\256\236\351\252\214\346\212\245\345\221\212.doc"
new file mode 100644
index 0000000000000000000000000000000000000000..6a28c85c689dc821977fbe611d9ad70fcfd6e5cf
Binary files /dev/null and "b/labs/2020302111091-\350\265\265\345\255\220\346\230\202-\345\256\236\351\252\214\346\212\245\345\221\212.doc" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/.keep" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/1\343\200\201\347\206\237\346\202\211MVVM\347\232\204\345\237\272\346\234\254\346\200\235\346\203\263.md" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/1\343\200\201\347\206\237\346\202\211MVVM\347\232\204\345\237\272\346\234\254\346\200\235\346\203\263.md"
new file mode 100644
index 0000000000000000000000000000000000000000..d6bd7e3757c67cf22a0b4a4e881feb9f8bb4fd78
--- /dev/null
+++ "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/1\343\200\201\347\206\237\346\202\211MVVM\347\232\204\345\237\272\346\234\254\346\200\235\346\203\263.md"
@@ -0,0 +1,371 @@
+第七周作业:
+
+# 1、熟悉MVVM的基本思想
+
+## MVVM模式的组成部分:
+
+模型
+模型是指代表真实状态内容的领域模型(面向对象),或者代表内容的数据访问层(以数据为中心)。
+视图
+就像MVC、MVP一样,视图是用户在屏幕上看到的结构、界面、外观(UI)
+视图模型
+视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
+
+MVVM是Model-View-ViewModel的缩写,MVVM是一种设计思想。
+View层是视图层,也就是用户界面。前端主要由HTML和CSS来构建;
+Model层 是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,对于前端来说就是后端的提供的API接口;
+ViewModel层是视图数据层,一个同步View和Model的对象。
+
+**MVVM设计思想的理念就是分而治之,把不同的业务代码放到不同的模块当中,然后通过特定的逻辑把他们组织到一块。最核心的就是双向绑定的方式 我们要清楚,从视图到模型用的是事件监听DOM Listeners,从模型到视图用的是数据绑定 Data Bindings**。
+
+# 2、熟悉 WPF 窗体应用程序创建流程
+
+在vs2022中创建WPF Application:
+
+
+
+
+打开应用程序在MainWindow.xaml中可以在Toolbox中选取相应的组件也可以在xaml中手动输入添加组件如下:
+
+
+
+在选好相应组件可以在组件工具栏中编辑组件或者在下面的xaml文件中在相应的组键中更改组件。如图:
+
+
+
+
+
+### 1、button
+
+ Button(按钮):表示 Windows 按钮控件,该按钮对 Click 事件做出反应。
+
+###### 常用属性介绍:
+
+
+
+ Background:元素的背景色; Foreground:前景色; Width/Height:宽度/高度;
+
+ BorderBrush:元素边框颜色; BorderThickness:元素边框宽度;
+
+ Command:获取或设置在按下按钮时调用的命令。
+
+ CommandBindings:获取与此元素关联的 CommandBinding 对象的集合。 CommandBinding 为此元素启用命令处理,并声明命令、命令的事件和由此元素附加的处理程序之间的链接。
+
+ CommandParameter:获取或设置要传递给 Command 属性的参数。
+
+ Content:获取或设置 ContentControl 的内容。
+
+ ContentStringFormat:获取或设置一个撰写字符串,该字符串指定如果 Content 属性显示为字符串,应如何设置该属性的格式。
+
+ ContentTemplate :获取或设置用于显示 ContentControl 内容的数据模板。
+
+ FontFamily:字体名称; FontSize:字体大小; FontStretch:字体在屏幕上紧缩或加宽的程度; FontWeight:字体粗细;
+
+ ClickMode:获取或设置 Click 事件何时发生。ClikMode值有如下三种,具体解析如下:
+ Release:指定当按下和释放按钮时应引发Click 事件。
+ Press:指定当按下按钮时应引发Click 事件。
+ Hover:指定当鼠标悬停在控件上时应引发Click 事件。
+
+
+### 2、label
+
+官方释义:表示包含一段任意类型内容的控件。也可以叫标签控件。
+
+ Label控件和TextBlock看起来非常像。但在使用时就会发现,Label使用的是Content属性而不是Text属性。这是因为Label是一个ContentControl,这意味着它可以包含任何类型 (的单个对象,例如字符串、图像或面板) ,而不仅仅是文本。
+###### Lable 常用属性
+
+ Background:背景; Foreground前景色(字体颜色)
+
+ BorderBrush:用于描述控件的边框背景的画笔。
+
+ BorderThickness:获取或设置控件的边框宽度。
+
+ Content:获取或设置 ContentControl 的内容。
+
+ FontFamily:获取或设置控件的字体系列。
+
+ FontSize:获取或设置字号。
+
+ FontStretch:获取或设置字体在屏幕上紧缩或加宽的程度。
+
+ FontStyle:获取或设置字体样式。
+
+ FontWeight:获取或设置指定字体的粗细。
+
+ Width/Height:宽度/高度。 IsEnabled:使能是否可用。 Name:元素标识名称。
+
+ Opacity:透明度。 Margin:元素的外边距。
+
+ HorizontalAlignment/VerticalAlignment:获取或设置在父元素(如面板或项控件)中组合此元素时所应用的水平/垂直对齐特征。
+
+ HorizontalContentAlignment/VerticalContentAlignment:获取或设置控件内容的水平/垂直对齐方式。
+```xaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### 3、textbox
+
+TextBox :文本输入框控件,是[WPF](https://so.csdn.net/so/search?q=WPF&spm=1001.2101.3001.7020)中最基本的文字输入控件。它允许最终用户在一行、对话输入、或多行编写,就像是个编辑器。
+
+###### 常用属性介绍
+
+
+ Background:背景; BorderBrush:边框背景的颜色; BorderThickness:边框宽度;
+
+ CanRedo:是否可重做最新的撤消操作; CanUndo:是否可撤消最新的操作;
+
+ CaretIndex:获取或设置插入符号的插入位置索引。
+
+ FlowDirection:获取或设置文本和其他用户界面 (UI) 元素在控制其布局的任何父元素内流动的方向。
+
+ Focusable:焦点获取; FontWeight:字体的粗细;Foreground:前景色;
+
+ FontFamily:字体样式; FontSize:字体大小; FontStretch:字体在屏幕上紧缩或加宽的程度。
+
+ HorizontalAlignment/VerticalAlignment:获取或设置在父元素中组合此元素时所应用的水平对齐特征/垂直对齐特征。
+
+ HorizontalContentAlignment/VerticalContentAlignment:获取或设置控件内容的水平对齐方式/垂直对齐方式。
+
+ HorizontalScrollBarVisibility/VerticalScrollBarVisibility:是否显示水平滚动条/垂直滚动条;
+
+ HorizontalOffset/VerticalOffset:获取和设置水平滚动条的位置/垂直滚动条的位置;
+
+ IsEnabled:使能,是否可用; IsReadOnly:对用户而言是否只读;
+
+ IsUndoEnabled:是否支持撤销功能; LineCount:文本总行数;
+
+ MaxLength:在文本框中手动输入的最大字符数。
+
+ MaxLines/MinLines:最大可见行数/最小行数。
+
+ Name:元素标识名称; Opacity:透明度;
+
+ SelectedText:文本框中当前选择的内容。
+
+ SelectionBrush:突出显示选定文本的画笔。
+
+ SelectionLength:文本框中当前选择的字符数。
+
+ SelectionOpacity:选择文本的透明度。
+
+ SelectionStart:当前选择的起始位置的字符索引。
+
+ SelectionTextBrush:选中文本的颜色;
+
+ Text:文本框的文本内容。
+
+ TextAlignment:文本框内容的水平对齐方式。
+
+ TextWrapping:文本框中文本的换行方式。
+
+
+```xaml
+
+
+
+ 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。
+
+
+
+ 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。
+
+
+
+
+ 秋风清,秋月明,落叶聚还散,寒鸦栖复惊,相思相见知何日,此时此夜难为情。
+
+
+```
+
+
+
+
+
+
+### 4、listbox
+
+ ListBox 是一个 ItemsControl,这意味着它可以包含任何类型的对象的集合 (,例如字符串、图像或面板) 。
+
+###### 常用属性介绍
+
+ FontFamily:字体系列; FontSize:字体大小; FontStretch:字体在屏幕上紧缩或加宽的程度;FontWeight:字体粗细;
+
+ Background:背景; BorderBrush:边框颜色; BorderThickness:边框宽度; Foreground:前景色;
+
+ Width/Height:宽度/高度; Name:元素标识名称; IsEnabled:使能,是否可用; Margin:外边距;
+
+ Opacity:透明度; Visibility:可见性; IsVisible:是否可见; FlowDirection:其子元素的流动方向;
+
+ LayoutTransform:在执行布局时应该应用于此元素的图形转换方式。 RenderTransform:元素的呈现位置的转换信息;
+
+ RenderTransformOrigin:由RenderTransform声明的任何可能呈现转换的中心点,相对于元素的边界。
+
+ HorizontalAlignment/VerticalAlignment:在父元素中组合此元素时所应用的水平对齐特征/垂直对齐特征。
+
+ HorizontalContentAlignment/VerticalContentAlignment:控件内容的水平对齐方式/垂直对齐方式。
+
+ Items:获取用于生成 ItemsControl 的内容的集合。
+
+ ItemsSource:获取或设置用于生成 ItemsControl 的内容的集合。
+
+ SelectedIndex:获取或设置当前选择中第一项的索引,如果选择为空,则返回负一(-1)。
+
+ SelectedItem:获取或设置当前选择中的第一项,或者,如果选择为空,则返回 null。
+
+ SelectedItems:获取当前选定的项。
+
+ SelectedValue:获取或设置通过使用 SelectedItem 而获取的 SelectedValuePath 的值。
+
+ SelectedValuePath:获取或设置用于从 SelectedValue 获取 SelectedItem 的路径。
+
+ SelectionMode:获取或设置 ListBox 的选择行为。
+
+ SnapsToDevicePixels:获取或设置一个值,该值确定在呈现过程中,此元素的呈现是否应使用特定于设备的像素设置。
+```xaml
+
+
+
+ Item 1
+ Item 2
+ Item 3
+ Item 4
+ Item 5
+ Item 6
+ Item 7
+ Item 8
+ Item 9
+ Item 10
+
+
+```
+
+```c#
+private void PrintText(object sender, SelectionChangedEventArgs e)
+{
+ ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
+ tb.Text = " You selected " + lbi.Content.ToString() + ".";
+}
+```
+
+
+
+### 5、dataGrid
+
+据微软官方文档介绍,使用该 DataGrid 控件,可以从许多不同的源(如 SQL 数据库、LINQ 查询或任何其他可绑定的数据源)显示和编辑数据。 列可以显示文本、控件(如 ComboBox )或任何其他 WPF 内容(如图像、按钮或模板中包含的任何内容)。
+
+###### 常用的属性介绍
+
+```
+IsReadOnly,该属性设置DataGrid单元格是否可以编辑,既可以对整个DataGrid进行设置,也可以单独对每一列进行设置。
+SelectionUnit属性可以设置当鼠标点击DataGrid时获得焦点的是一个单元格或一个单元行,该属性会影响获取单元格的列索引。
+CanUserAddRows属性设置是否在编辑行后再增加一行空白行,如果使用了数据源绑定,那么建议设置为False。
+AutoGenerateColumns属性,如果使用了数据源绑定,那么应设置为False,否则相同的列会重复出现。
+设置DataGrid表头内容居中显示,需要使用DataGrid.ColumnHeaderStyle样式进行设置,而没有可以直接设置居中的属性。
+```
+
+
+
+### 6、combox
+
+ ComboBox 表示带有下拉列表的选择控件,通过单击控件上的箭头可显示或隐藏下拉列表。也叫下拉列表控件。
+
+###### 常用属性介绍
+
+ FontFamily:字体系列; FontSize:字体大小; FontStretch:字体在屏幕上紧缩或加宽的程度;FontWeight:字体粗细;
+
+ Background:背景; BorderBrush:边框颜色; BorderThickness:边框宽度; Foreground:前景色;
+
+ Width/Height:宽度/高度; Name:元素标识名称; IsEnabled:使能,是否可用; Margin:外边距;
+
+ Opacity:透明度; Visibility:可见性; IsVisible:是否可见; FlowDirection:其子元素的流动方向;
+
+ LayoutTransform:在执行布局时应该应用于此元素的图形转换方式。 RenderTransform:元素的呈现位置的转换信息;
+
+ RenderTransformOrigin:由RenderTransform声明的任何可能呈现转换的中心点,相对于元素的边界。
+
+ HorizontalAlignment/VerticalAlignment:在父元素中组合此元素时所应用的水平对齐特征/垂直对齐特征。
+
+ HorizontalContentAlignment/VerticalContentAlignment:控件内容的水平对齐方式/垂直对齐方式。
+
+ Items:获取用于生成 ItemsControl 的内容的集合。ItemTemplate:获取或设置用来显示每个项的 DataTemplate。
+
+ ItemsPanel:获取或设置模板,该模板定义对项的布局进行控制的面板。
+
+ ItemsSource:获取或设置用于生成 ItemsControl 的内容的集合。
+
+ SelectedIndex:获取或设置当前选择中第一项的索引,如果选择为空,则返回负一(-1)。
+
+ SelectedItem:获取或设置当前选择中的第一项,或者,如果选择为空,则返回 null。
+
+ SelectedItems:获取当前选定的项。 Text:获取或设置当前选定项的文本。
+
+ SelectedValue:获取或设置通过使用 SelectedItem 而获取的 SelectedValuePath 的值。
+
+ SelectedValuePath:获取或设置用于从 SelectedValue 获取 SelectedItem 的路径。
+
+ SelectionBoxItem:获取在选择框中显示的项。SelectionBoxItemTemplate:获取选择框内容的项模板。
+
+ SnapsToDevicePixels:获取或设置一个值,该值确定在呈现过程中,此元素的呈现是否应使用特定于设备的像素设置。
+
+ IsDropDownOpen:获取或设置一个值,该值指示组合框的下拉部分当前是否打开。
+
+ IsEditable:获取或设置一个值,该值指示启用或禁用 ComboBox 的文本框中的文本编辑。
+
+ IsReadOnly:获取或设置启用仅限选择模式的值,在此模式中,可选择但不可编辑组合框中的内容。
+
+
+# 三、实验准备
+
+–https://gitee.com/principlewindows/win-principle-2022/tree/main/labs/lab_1
+
+已进行完毕
+
+# 四、搭建 VS 下 python 调试环境及机器学习平台 pytorch,尝试 gym
+
+### 1、尝试安装Anaconda
+
+在清华大学镜像网站中下载
+
+
+
+
+
+检验安装是否成功:
+
+
+
+### 2、安装pythorch
+
+
+
+
+
+
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/.keep" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129200238126.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129200238126.png"
new file mode 100644
index 0000000000000000000000000000000000000000..1fc3ce792895ad35686518a36db37e3e21101ef0
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129200238126.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201345697.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201345697.png"
new file mode 100644
index 0000000000000000000000000000000000000000..881eafca806210343d9e97abde29734f14fc6ae8
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201345697.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201610623.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201610623.png"
new file mode 100644
index 0000000000000000000000000000000000000000..9083b46d8366233580fd7c2c94199e09216af524
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129201610623.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205233239.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205233239.png"
new file mode 100644
index 0000000000000000000000000000000000000000..a12670cc4846396e287ffb364403d1ae4acc1208
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205233239.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205305680.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205305680.png"
new file mode 100644
index 0000000000000000000000000000000000000000..8d5d4c4d7698554c1ef3b6152caef2f0bcc3989c
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205305680.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205503858.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205503858.png"
new file mode 100644
index 0000000000000000000000000000000000000000..3027c4105eda5b555cbf5e0b9836bf07b97c5c25
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221129205503858.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130163923354.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130163923354.png"
new file mode 100644
index 0000000000000000000000000000000000000000..3490f48d2837830673ff6411c5c1d83180d6bd4e
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130163923354.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130165808584.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130165808584.png"
new file mode 100644
index 0000000000000000000000000000000000000000..b7c9658d6979f9bd8785d193cc142a882d285fdb
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130165808584.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170136525.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170136525.png"
new file mode 100644
index 0000000000000000000000000000000000000000..e64cc54a8f075cae7836196cbfdeacb98a88373c
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170136525.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170247955.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170247955.png"
new file mode 100644
index 0000000000000000000000000000000000000000..15fd32b33ba31d0fde56114da4be018e5cc07059
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170247955.png" differ
diff --git "a/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170755643.png" "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170755643.png"
new file mode 100644
index 0000000000000000000000000000000000000000..8f8eb3de2f7326966a8f371898f64e6e8306c7a2
Binary files /dev/null and "b/\347\254\254\344\270\203\345\221\250\344\275\234\344\270\232/image/image-20221130170755643.png" differ
diff --git "a/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_7.md" "b/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_7.md"
new file mode 100644
index 0000000000000000000000000000000000000000..65a1f97a73601bf56697f95e7f4b1582b61e3c6d
--- /dev/null
+++ "b/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_7.md"
@@ -0,0 +1,70 @@
+# 注册表结构和注册表值类型
+
+
+
+
+
+## 1 结构
+
+包含有关注册表值的信息。 列表中的RegQueryMultipleValues 函数使用此结构。
+
+```cpp
+ typedef struct value_entW {
+ LPWSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD_PTR ve_valueptr;
+ DWORD ve_type;
+ } VALENTW, *PVALENTW;
+```
+
+##### **ve_valuename**
+
+要检索的值的名称。 一定要在调用 RegQueryMultipleValues 之前设置这个成员。
+
+**ve_valuelen**
+
+ve_valueptr 指向的数据的大小,以字节为单位。
+
+**ve_valueptr**
+
+指向值条目数据的指针。 这是一个指向lpValueBuf 缓冲区中返回值的数据由RegQueryMultipleValues。
+
+**ve_type**
+
+ve_valueptr 指向的数据类型。 对于列表的可能的类型,请参阅注册表值类型。
+
+## 2 值类型
+
+以下示例遍历 REG_MULTI_SZ 字符串。
+
+```cpp
+#include
+#include
+#include
+
+void SampleSzz(PTSTR pszz)
+{
+ _tprintf(_TEXT("\tBegin multi-sz string\n"));
+ while (*pszz)
+ {
+ _tprintf(_TEXT("\t\t%s\n"), pszz);
+ pszz = pszz + _tcslen(pszz) + 1;
+ }
+ _tprintf(_TEXT("\tEnd multi-sz\n"));
+}
+
+int __cdecl main(int argc, char **argv)
+{
+ // Because the compiler adds a \0 at the end of quoted strings,
+ // there are two \0 terminators at the end.
+
+ _tprintf(_TEXT("Conventional multi-sz string:\n"));
+ SampleSzz(_TEXT("String1\0String2\0String3\0LastString\0"));
+
+ _tprintf(_TEXT("\nTest case with no strings:\n"));
+ SampleSzz(_TEXT(""));
+
+ return 0;
+}
+```
+
diff --git "a/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_8.md" "b/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_8.md"
new file mode 100644
index 0000000000000000000000000000000000000000..f152a4d0aaa2a979ce4137fb42a9d3ec42a5f725
--- /dev/null
+++ "b/\347\254\254\345\205\253\345\221\250\344\275\234\344\270\232/2_8.md"
@@ -0,0 +1,121 @@
+# 枚举注册表子项
+
+
+
+***
+
+此实验示例使用 RegQueryInfoKey、RegEnumKeyEx、和 RegEnumValue 函数枚举的子项指定的键。 传递给每个函数的 hKey 参数是一个打开密钥的句柄。 必须在该功能之前打开此键打电话然后关闭。
+
+```cpp
+//QueryKey - 枚举键的子键及其关联值。
+//hKey - 要枚举其子键和值的键。
+
+#include
+#include
+#include
+
+#define MAX_KEY_LENGTH 255
+#define MAX_VALUE_NAME 16383
+
+void QueryKey(HKEY hKey)
+{
+ TCHAR achKey[MAX_KEY_LENGTH]; // 子项名称的缓冲区
+ DWORD cbName; // 名称字符串的大小
+ TCHAR achClass[MAX_PATH] = TEXT(""); // 类名缓冲区
+ DWORD cchClassName = MAX_PATH; //类字符串的大小
+ DWORD cSubKeys=0; // 子键数
+ DWORD cbMaxSubKey; // 最长的子密钥大小
+ DWORD cchMaxClass; // 最长的类字符串
+ DWORD cValues; // 键值的数量
+ DWORD cchMaxValue; // 最长值名称
+ DWORD cbMaxValueData; // 最长值数据
+ DWORD cbSecurityDescriptor; // 安全描述符的大小
+ FILETIME ftLastWriteTime; // 最后写入时间
+
+ DWORD i, retCode;
+
+ TCHAR achValue[MAX_VALUE_NAME];
+ DWORD cchValue = MAX_VALUE_NAME;
+
+ // 获取类名和值计数。
+ retCode = RegQueryInfoKey(
+ hKey, // 钥匙柄
+ achClass, // 类名缓冲区
+ &cchClassName, // 类字符串的大小
+ NULL, // 预订的
+ &cSubKeys, // 子键数
+ &cbMaxSubKey, // 最长的子密钥大小
+ &cchMaxClass, // 最长的类字符串
+ &cValues, // 此键的值数
+ &cchMaxValue, // 最长值名称
+ &cbMaxValueData, // 最长值数据
+ &cbSecurityDescriptor, // 安全描述符
+ &ftLastWriteTime); // 最后写入时间
+
+ // 枚举子键,直到 RegEnumKeyEx 失败.
+
+ if (cSubKeys)
+ {
+ printf( "\nNumber of subkeys: %d\n", cSubKeys);
+
+ for (i=0; i