📄 minifiler开发心得 - laoka - 51cto技术博客-领先的it技术博客.htm
字号:
lang=EN-US>FileObject</SPAN>还没有完全建立好,因此会失败<SPAN
lang=EN-US>,</SPAN>不能用<SPAN
lang=EN-US>.<o:p></o:p></SPAN></FONT></SPAN></DIV>
<DIV
style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><SPAN
lang=EN-US style="FONT-SIZE: 10pt"><o:p><FONT
face=宋体> </FONT></o:p></SPAN></DIV>
<H3 style="MARGIN: 12pt 0cm 0pt"><SPAN lang=EN-US
style="FONT-SIZE: 10pt; LINE-HEIGHT: 173%"><FONT face=Calibri>How
Context Management Works<o:p></o:p></FONT></SPAN></H3>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">上下文管理是</SPAN><SPAN
lang=EN-US><FONT face=Calibri>Minifilter</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">中最容易出问题的部分</SPAN><SPAN
lang=EN-US><FONT face=Calibri>.</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">而现在检测上下文引用泄漏有限</SPAN><SPAN
lang=EN-US><FONT face=Calibri>,</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">问题不好找</SPAN><SPAN
lang=EN-US><FONT face=Calibri>. </FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">现在最好的方法是在</SPAN><SPAN
lang=EN-US><FONT face=Calibri>Driver Verifier</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">中设置</SPAN><SPAN
lang=EN-US><FONT face=Calibri>Pool Track,</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">这样只知道有泄漏,无法定位是那个地方</SPAN><SPAN
lang=EN-US><FONT face=Calibri>.</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">最好在刚开始编码时就这么设置,代码量大了就真的一个机会也没有了</SPAN><SPAN
lang=EN-US><FONT face=Calibri>,</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">哈,事在人为</SPAN><SPAN
lang=EN-US><FONT face=Calibri>!</FONT></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><o:p><FONT face=Calibri> </FONT></o:p></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">上下文是引用型数据结构</SPAN><SPAN
lang=EN-US><FONT face=Calibri>.</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">只要引用非</SPAN><SPAN
lang=EN-US><FONT face=Calibri>0</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">,</SPAN><SPAN
lang=EN-US><FONT face=Calibri>Filter Manager</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">就不会释放它</SPAN><SPAN
lang=EN-US><FONT face=Calibri>.</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">当引用变为</SPAN><SPAN
lang=EN-US><FONT face=Calibri>0</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">时</SPAN><SPAN
lang=EN-US><FONT face=Calibri>,</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">事先设置的</SPAN><STRONG><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: "
Calibri?,?sans-serif??>ContextCleanup
Callback</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">回调函数会被调用</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>,</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">然后上下文件被删除</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>.<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">因此,认识到那些操作影响引用计数是重要的</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>.<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">创建</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>,</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">查找</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>,</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">显式引用一个上下文都会对引用计数进行加一操作</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>,</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">如</SPAN></STRONG><STRONG><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: "
Calibri?,?sans-serif??>FltReferenceContext,
FltGetContext</SPAN></STRONG><STRONG><SPAN lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?;>,</SPAN></STRONG><SPAN
lang=EN-US style="FONT-SIZE: 10pt"><FONT face=Calibri> <STRONG><SPAN
style="FONT-FAMILY: "
Calibri?,?sans-serif??>FltSetXXXContext</SPAN></STRONG>
</FONT></SPAN><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">也会进行一个对引用加一的操作</SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt"><FONT
face=Calibri>.<B><o:p></o:p></B></FONT></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">引用减一发生在如上下文</SPAN><SPAN
lang=EN-US><FONT face=Calibri>detached</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">时</SPAN><SPAN
lang=EN-US><FONT face=Calibri>,</FONT></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">这个操作直接使引用为</SPAN><SPAN
lang=EN-US><FONT face=Calibri>0.</FONT></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri">引用技术是在多线程环境下保护数据安全性的一种技术</SPAN><SPAN
lang=EN-US><FONT face=Calibri>.</FONT></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN
lang=EN-US><o:p><FONT face=Calibri> </FONT></o:p></SPAN></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>FltSetContext</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">把一个上下文件</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>Attatch</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">到一个内核数据结构之中,并对引用进行加一的操作</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>.<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">什么原因会引发</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>Detach</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">操作呢</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>?</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">主要有以下四个</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>:<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3"><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?; Calibri;
mso-bidi-font-family: mso-fareast-font-family:><SPAN
style="mso-list: ignore">1.<SPAN Roman?? New
Times>
</SPAN></SPAN></SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">当被</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>Attached</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">的数据结构被删除时</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>,</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">如当文件系统调用</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?;>FsRtlTeardownPer
StreamContexts,<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">那么</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?;>Filter
Manger</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">将</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>Detach</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">所有的</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>StreamContext.<o:p></o:p></SPAN></STRONG></DIV>
<DIV class=MsoNormal
style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3"><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?; Calibri;
mso-bidi-font-family: mso-fareast-font-family:><SPAN
style="mso-list: ignore">2.<SPAN Roman?? New
Times>
</SPAN></SPAN></SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">当被</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight:
Calibri?,?sans-serif?;>Attached</SPAN></STRONG><STRONG><SPAN
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: calibri; mso-hansi-font-family: calibri; mso-bidi-font-weight: bold">的数据结构关联的</SPAN></STRONG><STRONG><SPAN
lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 10pt; FONT-FAMILY: " bold?
mso-bidi-font-weight: Calibri?,?sans-serif?;>filter
Instance</SPAN></STRONG><STRONG><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -