﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-GaRY's Blog-随笔分类-System</title><link>http://www.phpweblog.net/GaRY/category/235.html</link><description>Beginning is always beautiful</description><language>zh-cn</language><lastBuildDate>Sun, 05 Aug 2007 09:27:47 GMT</lastBuildDate><pubDate>Sun, 05 Aug 2007 09:27:47 GMT</pubDate><ttl>60</ttl><item><title>[zt]利用NtSystemDebugControl进入Ring0的源代码</title><link>http://www.phpweblog.net/GaRY/archive/2007/08/05/1679.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Sun, 05 Aug 2007 05:03:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/08/05/1679.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1679.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/08/05/1679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1679.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1679.html</trackback:ping><description><![CDATA[文章作者：zjjmj <br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>*&nbsp;Discovered&nbsp;and&nbsp;coded&nbsp;by&nbsp;randnut&nbsp;Jan&nbsp;25,&nbsp;2004<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>*&nbsp;I&nbsp;just&nbsp;add&nbsp;my&nbsp;callgate&nbsp;routine,&nbsp;hope&nbsp;you&nbsp;enjoy&nbsp;it,&nbsp;hehe.&nbsp;&nbsp;------zjjmj2002<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;windows.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;stdio.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;int&nbsp;NTSTATUS;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;DWORD&nbsp;ULONG_PTR;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">define&nbsp;NTAPI&nbsp;__stdcall</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;IA32_SYSENTER_CS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x174</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;IA32_SYSENTER_ESP&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x175</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;IA32_SYSENTER_EIP&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x176</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;SelCodeKernel&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x8</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;CmosIndx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x0E</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CMOS&nbsp;Diagnostic&nbsp;Status</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;RdWrIoPort&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x80</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">define&nbsp;FCHK(a)&nbsp;if&nbsp;(!(a))&nbsp;{printf(#a&nbsp;"&nbsp;failed\n");&nbsp;return&nbsp;0;}</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">define&nbsp;FCHK2(a,b)&nbsp;if&nbsp;(!(a))&nbsp;{printf(#a&nbsp;"&nbsp;failed\n");&nbsp;goto&nbsp;b;}</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;enum&nbsp;_DEBUG_CONTROL_CODE&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysReadIoSpace&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysWriteIoSpace&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysReadMsr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysWriteMsr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysReadBusData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">18</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DebugSysWriteBusData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;DEBUG_CONTROL_CODE;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;enum&nbsp;_BUS_DATA_TYPE&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ConfigurationSpaceUndefined&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>Cmos</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>EisaConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008080">Pos</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>CbusConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PCIConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>VMEConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>NuBusConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PCMCIAConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>MPIConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>MPSAConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PNPISAConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>SgiInternalConfiguration</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>MaximumBusDataType<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;BUS_DATA_TYPE</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">PBUS_DATA_TYPE;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;See&nbsp;HalGetBusDataByOffset()/HalSetBusDataByOffset()&nbsp;for&nbsp;explanations&nbsp;of&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>struct&nbsp;MyCallGate<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OFFSETL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECTOR;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCOUNT;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GTYPE;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OFFSETH;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DWORD&nbsp;&nbsp;&nbsp;&nbsp;CodeLimit;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DWORD&nbsp;&nbsp;&nbsp;&nbsp;CodeBase;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>};<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;struct&nbsp;_BUS_STRUCT&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;&nbsp;Offset;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PVOID&nbsp;&nbsp;Buffer;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;&nbsp;Length;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BUS_DATA_TYPE&nbsp;&nbsp;BusDataType;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;&nbsp;BusNumber;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;&nbsp;SlotNumber;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;BUS_STRUCT;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>NTSTATUS<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(NTAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">PZwSystemDebugControl)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DEBUG_CONTROL_CODE&nbsp;ControlCode</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PVOID&nbsp;InputBuffer</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;InputBufferLength</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PVOID&nbsp;OutputBuffer</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>ULONG&nbsp;OutputBufferLength</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PULONG&nbsp;ReturnLength<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>PZwSystemDebugControl&nbsp;ZwSystemDebugControl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;CmosRead(int&nbsp;offs</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;BYTE</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;ppAddr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BYTE&nbsp;buf;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BUS_STRUCT&nbsp;bus;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">BusDataType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Cmos;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">BusNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">SlotNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;offs;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ppAddr&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">ppAddr&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">buf;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Offset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ZwSystemDebugControl(DebugSysReadBusData</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">bus</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(bus)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ppAddr&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x100</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;buf;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;CmosWrite(int&nbsp;offs</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;BYTE&nbsp;val</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;BYTE</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;ppAddr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BUS_STRUCT&nbsp;bus;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">BusDataType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Cmos;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">BusNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">SlotNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;offs;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ppAddr&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">val&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">ppAddr;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Offset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>bus</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ZwSystemDebugControl(DebugSysWriteBusData</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">bus</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(bus)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;WriteMem(DWORD&nbsp;MemAddr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;BYTE&nbsp;Value)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;OldVal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CmosRead(CmosIndx);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BYTE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(BYTE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)(ULONG_PTR)MemAddr;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>CmosWrite(CmosIndx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;Value);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>CmosRead(CmosIndx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>CmosWrite(CmosIndx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;OldVal);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;EnablePrivilege(HANDLE&nbsp;hToken</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;LPCSTR&nbsp;lpszName</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;int&nbsp;enable)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>TOKEN_PRIVILEGES&nbsp;tok;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>tok</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">PrivilegeCount&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>tok</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Privileges[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Attributes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;enable&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;SE_PRIVILEGE_ENABLED&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>FCHK(LookupPrivilegeValue(</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;lpszName</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tok</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Privileges[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Luid));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>FCHK(AdjustTokenPrivileges(hToken</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">FALSE</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tok</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(tok)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>void&nbsp;CallGate()<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>MyCallGate&nbsp;&nbsp;&nbsp;&nbsp;CallGate;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GDTBase;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;_asm<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;EDX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SGDT&nbsp;FWORD&nbsp;PTR&nbsp;SS</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">[ESP</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;EDX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;GDTBase</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">EDX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">OFFSETL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">DX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHR&nbsp;EDX</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">OFFSETH</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">DX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">SELECTOR&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x358</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">DCOUNT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">GTYPE&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xec</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">CodeLimit&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xffff</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">CodeBase&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xcf9a00</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Build&nbsp;My&nbsp;CallGate</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WriteMem(GDTBase</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xc3</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;GDTBase&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GDTBase</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0x350</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;int&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;p;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">q;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_asm<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEA&nbsp;ESI</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">CallGate<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;ESI</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">i<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;EAX</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">EAX<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LODSB<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;p</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">AL&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteMem(GDTBase</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;p);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;main(int&nbsp;argc</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;hNtdll;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FCHK((hNtdll&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LoadLibrary(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ntdll.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FCHK((ZwSystemDebugControl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(PZwSystemDebugControl)GetProcAddress(hNtdll</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ZwSystemDebugControl</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hToken;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FCHK(OpenProcessToken(GetCurrentProcess()</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;TOKEN_ADJUST_PRIVILEGES&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>TOKEN_QUERY</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">hToken));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FCHK(EnablePrivilege(hToken</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;SE_DEBUG_NAME</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CallGate();<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<img src ="http://www.phpweblog.net/GaRY/aggbug/1679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-08-05 13:03 <a href="http://www.phpweblog.net/GaRY/archive/2007/08/05/1679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]detours， x86 kernel hook 以及 x64 kernel hook</title><link>http://www.phpweblog.net/GaRY/archive/2007/07/11/1496.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Tue, 10 Jul 2007 16:54:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/07/11/1496.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1496.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/07/11/1496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1496.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1496.html</trackback:ping><description><![CDATA[<p>我假设读者已经非常熟悉detours，阅读此文只是为了增强对detours的理解以及为了实现x64 hook。有关detours原理部分不再多讲。<br><br>X86 Kernel Hook<br>早些年，我把detours1.5移植到x86核心层，工作的不错，我一直用它来hook系统一些内部函数，有时候也用来hook IoCreateFile这类导出函数。让detours1.5在核心工作稳定并不是一件困难的事情。可能有些c/c++的麻烦，但是很快就可以解决。唯一需要注意的地方是detours1.5用VirtualProtect来让内存READ_WRITE_EXECUTE，在核心层有2种方法，第一种是群众所喜闻乐见的清除cr0，第二种是在核心层通过调用native api做VirtualProtect的事情。<br>detours的方法对比import/export方法有一些很明显的好处，其最大的好处是可以用来hook内部函数。而且由于hook的方法是直接修改函数体，所以不管调用者怎么玩花样，都很难绕过hook。<br>detours的缺点主要如下：<br>1，detours x86无法hook小于5字节的函数<br>2，detours x86需要一个完备的反汇编器和解释器，实际上detours代码中并不包含这个，因此，如果需要写一个函数阻止他人hook，可以这么写：<br>&nbsp; proc near<br>&nbsp; &nbsp; &nbsp; xor eax,eax<br>&nbsp; &nbsp; &nbsp; jeax 1<br>&nbsp; &nbsp; &nbsp; int 3<br>&nbsp; &nbsp; &nbsp; ... // do something<br>&nbsp; &nbsp; proc end<br>注意到这里的这个jmp，因为eax肯定为0，所以该int3不会被调用，而被detours过的代码则很可能走到int3上去了，为了让detours的代码不走到int3，detours必须能够解析出前面3行代码的意思，并且修正jeax 1为jeax 1+(trampoline-function)。用类似的技术，也可以欺骗detours。<br>3，detours x86无法处理如下函数：<br>&nbsp; proc near<br>flag: ... // 函数前5个字节<br>&nbsp; &nbsp; .... //do something<br>&nbsp; &nbsp; jmp flag<br>&nbsp; &nbsp; .... // do something<br>&nbsp; &nbsp; proc end<br>该函数执行体中有一个jmp，跳到前5个字节。可是被detours过之后，该函数的前5个字节被修改了，而且改成了jmp trampoline。为了能够让detours可以处理此操作，必须反汇编解析整个函数体，用2种所描述的方法修改jmp flag。<br><br>综上述，detours思路很好，但是存在缺陷，要搞定这些缺陷，需要完整反汇编器。<br><br>X64 Kernel Hook<br>最近有一个需求要在x64下实现类似的hook模块，我找到了detours2.1，给MS发了email，MS的答复是，包含64bit的detours2.1，需要10000 USD。<br>于是我就删掉了MS的email，开始自己动手来做这个事情了。我大致说一下原理和需要注意的地方。<br><br>x64 hook和x86 hook的原理相似，都是修改原函数的首地址。不同的是，x64下不存在<br>jmp 64_address这种指令，x86下要跨4G跳转，必须是jmp [64_address]，对应的汇编码不再是e9 xxxxxxxx，而是ff15 [xxxxxxxx]，其中xxxxxxxx保存的是一个64_address。注意xxxxxxxx依然是32位，所以，该内存也必须和function处于同一个4G。<br><br>这个限制对于普通的代码编译来说，并不存在太大的问题，因为很少有exe超过4G的。所以编译器生成的代码依然使用e9 xxxxxxxx。对于import的dll来说，通常都是call [xxxxxxxx]，以前是这样，现在还是这样，不同的是，[xxxxxxxx]以前指向32位的地址，现在指向64位的地址。这样一来，dll加载的位置和exe所在的位置不在同一个4G也没有关系了。<br><br>对于detours来说，受上面所述特性影响的是，trampoline通常位于heap memory/nonpaged pool，new_function位于我们自己所写代码的dll/driver中，old_function位于我们所需要hook的那个模块中。这里面存在一个基本矛盾是，new_function通常和old_function分别处于2个不同dll或者.sys中，系统很可能把他们加载到了距离很远的空间中，也即abs(new_function-old_function)&gt;4G。这样一来，就无法使用e9 xxxxxxxx，而必须使用ff15 [xxxxxxxx]了，而且xxxxxxxx是一个32的偏移，所以[xxxxxxxx]还不能位于我们的dll/sys中。<br><br>根据以上的分析，最后可以得出如下算法：<br>1，找到需要hook的函数地址<br>2，解析从函数起始地址开始，至少6+8=14个字节的代码。代码不能断开。以上2个过程和detourx86一样，不同的是，detoursx86之需要e9 xxxxxxxx，也就是说只需要5个字节，而我们必须用ff15 [xxxxxxxx]。如果函数体小于14个字节，这意味着该函书无法detours。<br>不过函数体小于14字节多半是因为里面执行了一个call或者jmp，那么解析该代码，把函数起始地址设置为jmp之后的地址，重新进行2过程。<br>3，把这14或者15，16...个字节拷贝到预先分配的一块内存中，我们叫它trampoline。<br>4，把前6个字节改为ff15 [0]，也即ff15 00000000<br>5，在随后的8个字节中保存new_function的起始地址<br>6，修正trampoline中的14字节的代码，如果里面有jmp，call等跳转语句，修改偏移量，这时候通常又需要跨4G的跳转，那么按照上面的方法修改之，trampoline的字节数可能会增加。<br>7，在trampoline的代码之后，插入ff15 [0]，并且在随后的8个字节中填充old_function+14。<br><br>trampoline可以预先分配一个100字节的buffer，初始化全部填充为nop，在进行7的时候，可以从trampoline的底部，也即100-14的位置开始填入ff,15,00,00,00,00, 64_bit_old_function+14(15,16...)。<br><br>以上算法的缺点和x86 detours的缺点一样，第一条为无法hook函数体小于14字节的函数。<br><br>14个字节相当大，有时候这个缺陷不可忍受，为此，介绍一种更为肮脏的手段。<br><br>代码加载到内存中时，通常有很多废空间，也即，在这些空间中，只有nop，或者永远不会执行。用IDA可以找到这些空间。如果能够找到足够大到，以至于可以保存一个64位地址的空间的话，那么可以只修改前5个字节为jmp [xxxxxxxx]，同时只拷贝5个字节到trampoline。trampoline的底部14个字节照旧。<br><br>以上就是x64下的detours过程。<br><br>有一个x64下需要注意的问题，vc8不支持x64下的_asm关键字，所以<br>_asm{ <br>cli<br>mov eax,cr0<br>and eax,not 1000h<br>mov cr0,eax }不能再用<br>取而代之的是<br>_disable();<br>uint64 cr0=__readcr0();<br>cr0 &amp;= 0xfffffffffffeffff;<br>__writecr0(cr0);<br>当然还可以继续用native api，不过以上方法简洁而且为广大群众所喜闻乐见。有关于_disable等函数，请查阅新版msdn。<br><br>至于IA64，我对此一无所知。<br><br>顺便说几点：<br>1，EM64T的cpu上可以run win64os，但是，不知为何，vmware无法在EM64T的cpu上install/run win64os。而amd64 cpu上即便安装的是win32 os，也可以在其上的vmware里install/run win64os。<br>2，softice已经停止开发，而且不支持x64，只有virtual模式才支持。鉴于其已经停止开发，建议大家都使用windbg。<br>3，idapro 5.0反汇编x64的代码，错误百出，一团乱麻，基本上需要先U再C。<br></p>
<div class=tpc_content>因为14字节的限制太大，以至于始终觉得不爽。后来想到了一个解决方案。<br><br>假设原函数是old_func，新函数是new_func，那么分配trampoline的时候，用某些技术方法，限定分配出的内存和old_func在同一个4G。可以通过VirtualAlloc实现，具体方法可以是多次改变第一个参数，调用VirtualAlloc，直到返回值不为NULL为止。<br><br>这样一来，detours的逻辑改变为：<br><br>1，首先把old_func的前5个字节拷贝到trampoline+14，然后修改为jmp offset，也即e9 trampoline-5-old<br>2，trampoline的前6字节为ff15 [0],接下来的8个字节为new_func_address<br>3，trampoline+14+5之后的5个字节为jmp (trampoline+14+5+5 - (old_func_addr+5))<br><br>这样调用old的时候，会首先执行jmp offset到trampoline，trampoline又jmp到了new_func，new_func调用old的时候，会直接跳到trampoline+14处，执行原来的前5个字节，然后再jmp会原函数体。<br><br>如此，一切都完美了 :)</div>
<img src ="http://www.phpweblog.net/GaRY/aggbug/1496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-07-11 00:54 <a href="http://www.phpweblog.net/GaRY/archive/2007/07/11/1496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Get Sysent Address On FreeBSD</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/18/get_syent_address_on_freebsd.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Mon, 18 Jun 2007 11:09:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/18/get_syent_address_on_freebsd.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1389.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/18/get_syent_address_on_freebsd.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1389.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1389.html</trackback:ping><description><![CDATA[FreeBSD的sysent表的地址在内核中可以直接使用,是个全局变量.可以直接hook.<br>但是如果是ring3下Patch on fly呢?和linux一样,都是读取/dev/kmem或者/dev/mem<br>开始走了点弯路,以为和linux一样需要到内核函数代码中去查找,于是做了如下分析( 可见不google自以为是的坏处:( )<br><br>
<div id="" style="border: 1px solid #666666;"><span style="font-weight: bold;">FreeBSD# uname -a </span><br>FreeBSD FreeBSD.0x1057 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Thu Nov&nbsp; 3 09:36:13 UTC 2005&nbsp;&nbsp;&nbsp; <span style="color: #20d806;">//系统是6.0的FREEBSD</span> root@x64.samsco.home:/usr/obj/usr/src/sys/GENERIC&nbsp; i386<br><span style="font-weight: bold;">FreeBSD# gdb -q /boot/kernel/kernel</span><br>(no debugging symbols found)...<span style="font-style: italic; font-weight: bold;">(gdb) p &amp;sysent</span><br>$1 = (&lt;data variable, no debug info&gt; *) 0xc08bdf60 <span style="color: #20d806;">//sysent地址</span><br><span style="font-weight: bold;">(gdb) q</span><br><span style="font-weight: bold;">FreeBSD# objdump -d /boot/kernel/kernel | grep 0xc08bdf60</span> <span style="color: #20d806;">//查找sysent地址在内核中出现的位置</span><br>c063ec4a:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8b 90 60 df 8b c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; 0xc08bdf60(%eax),%edx<br>c063ec6e:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 89 90 60 df 8b c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,0xc08bdf60(%eax)<br>c063ecac:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 89 90 60 df 8b c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,0xc08bdf60(%eax)<br><span style="font-weight: bold;">FreeBSD# gdb -q /boot/kernel/kernel</span><br>(no debugging symbols found)...(gdb) disass 0xc063ec40 <span style="color: #20d806;">//反汇编此地址</span><br>Dump of assembler code for function syscall_register: <span style="color: #20d806;">//在函数体syscall_register内</span><br>0xc063ebc4 &lt;syscall_register+0&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %ebp<br>0xc063ebc5 &lt;syscall_register+1&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esp,%ebp<br>0xc063ebc7 &lt;syscall_register+3&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %edi<br>0xc063ebc8 &lt;syscall_register+4&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %esi<br>.....<br>.....<br>0xc063ec36 &lt;syscall_register+114&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmpl&nbsp;&nbsp; $0xc063ebb4,0xc08bdf64(%eax)<br>0xc063ec40 &lt;syscall_register+124&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jne&nbsp;&nbsp;&nbsp; 0xc063ec8b &lt;syscall_register+199&gt;<br>0xc063ec42 &lt;syscall_register+126&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; (%ebx),%eax<br>0xc063ec44 &lt;syscall_register+128&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; (%eax,%eax,2),%eax<br>0xc063ec47 &lt;syscall_register+131&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shl&nbsp;&nbsp;&nbsp; $0x2,%eax<br>0xc063ec4a &lt;syscall_register+134&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; 0xc08bdf60(%eax),%edx&nbsp; <span style="color: #20d806;">//找到<br></span>0xc063ec50 &lt;syscall_register+140&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,(%esi)<br>---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---q<br>Quit<br><span style="font-weight: bold;">(gdb) x/xw (syscall_register+134)</span><br>0xc063ec4a &lt;syscall_register+134&gt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xdf60908b <span style="color: #20d806;">//字节码是这样的阿</span><br><span style="font-weight: bold;">(gdb) q</span><br style="font-weight: bold;"><span style="font-weight: bold;">FreeBSD# </span><br></div>
<br>于是速度动手,写了个第一版本获取sysent地址的代码:<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">#</span><span style="color: #008000;">include&nbsp;&lt;fcntl.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;kvm.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;limits.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;nlist.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;stdio.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;sys/types.h&gt;</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #008000;">#</span><span style="color: #008000;">define&nbsp;SIZE&nbsp;&nbsp;&nbsp;&nbsp;0x100&nbsp;//&nbsp;搜索0x100个字节</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>int<br>main(int&nbsp;argc</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;char&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;errbuf[_POSIX2_LINE_MAX]</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">p;<br>&nbsp;&nbsp;&nbsp;&nbsp;kvm_t&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">kd;<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;nlist&nbsp;nl[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;{</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">}</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;{</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">}</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;syscall_register_code[SIZE];&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;保存原始函数字节码</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;sct;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;kd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;kvm_openfiles(</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;O_RDWR</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;errbuf);</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;打开/dev/mem</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kd&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;errbuf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">syscall_register</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kvm_nlist(kd</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;nl)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;查找syscall_register</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;kvm_geterr(kd));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;Symbol&nbsp;%s&nbsp;not&nbsp;found\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kvm_read(kd</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_value</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;syscall_register_code</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;SIZE)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;保存字节码</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;kvm_geterr(kd));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(char&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;memmem(syscall_register_code</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;SIZE</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\x8b\x90</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;查找&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;0xc08bdf60(%eax),%edx</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;sct&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">(unsigned</span><span style="color: #000000;">*</span><span style="color: #000000;">)(p</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">printf</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">sysent&nbsp;at&nbsp;0x%x\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;sct);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kvm_close(kd)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;kvm_geterr(kd));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>}<br></span></div>
<br>结果也如人所愿:<br><br>
<div style="border: 1px solid #666666;"><span style="font-weight: bold;">FreeBSD# gcc -o getsysent getsysent.c -lkvm</span><br style="font-weight: bold;"><span style="font-weight: bold;">FreeBSD# ./getsysent</span><br>sysent at 0xc08bdf60</div>
<br>到这里突然发现一个问题,如果能直接从/dev/mem获取syscall_register符号的地址,那么也就能直接获取sysent<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">#</span><span style="color: #008000;">include&nbsp;&lt;fcntl.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;kvm.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;limits.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;nlist.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;stdio.h&gt;</span><span style="color: #008000;"><br>#</span><span style="color: #008000;">include&nbsp;&lt;sys/types.h&gt;</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>int<br>main(int&nbsp;argc</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;char&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;errbuf[_POSIX2_LINE_MAX];<br>&nbsp;&nbsp;&nbsp;&nbsp;kvm_t&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">kd;<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;nlist&nbsp;nl[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;{</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">}</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;{</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">}</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;};<br><br>&nbsp;&nbsp;&nbsp; if(argc != 2) return 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;kd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;kvm_openfiles(</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;O_RDWR</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;errbuf);</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;打开/dev/mem</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kd&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;errbuf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;argv[</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kvm_nlist(kd</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;nl)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{ </span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;kvm_geterr(kd));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;Symbol&nbsp;%s&nbsp;not&nbsp;found\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">printf</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s at&nbsp;0x%x\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;"> nl[0].n_name, nl[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">.</span><span style="color: #000000;">n_value);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kvm_close(kd)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">fprintf</span><span style="color: #000000;">(stderr</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ERROR:&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;kvm_geterr(kd));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>}<br></span></div>
<br>结果:<br><br>
<div style="border: 1px solid #666666;"><span style="font-weight: bold;">FreeBSD# gcc -o getsysent2 getsysent2.c -lkvm</span><br style="font-weight: bold;"><span style="font-weight: bold;">FreeBSD# ./getsysent2 sysent</span><br>sysent at 0xc08bdf60<br><span style="font-weight: bold;">FreeBSD# ./getsysent2 syscall</span><br>syscall at 0xc0807c90<br></div>
<br><br>也成功了,看来在FreeBSD里使用kvm库对mem等操作果然方便很多:)<br><br><br> <img src ="http://www.phpweblog.net/GaRY/aggbug/1389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-18 19:09 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/18/get_syent_address_on_freebsd.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Get Sys_call_table Address On Linux</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/17/get_sys_call_table_address.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Sun, 17 Jun 2007 10:04:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/17/get_sys_call_table_address.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1385.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/17/get_sys_call_table_address.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1385.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1385.html</trackback:ping><description><![CDATA[被迫无奈,windows居然坏了,只能用装了n久一直没用的ubuntu..<br>捣鼓了几天,把常用软件都装上了.然后开始熟悉熟悉linux下的编程<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">types.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">stat.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">fcntl.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">unistd.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">errno.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">mman.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;CALLOFF&nbsp;100 </span><span style="color: #008000;">//读取100字节</span><span style="color: #000000;"></span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">short</span><span style="color: #000000;">&nbsp;limit;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">base</span><span style="color: #000000;">;<br><br>}&nbsp;__attribute__&nbsp;((packed))&nbsp;idtr;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">这个结构表示IDTR寄存器，这个寄存器中保存中断描述符表&nbsp;的地址</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">short</span><span style="color: #000000;">&nbsp;off1;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">short</span><span style="color: #000000;">&nbsp;sel;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;none,flags;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">short</span><span style="color: #000000;">&nbsp;off2;<br><br>}&nbsp;__attribute__&nbsp;((packed))&nbsp;idt;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">中断描述符表中的内容：中断门描述符</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br><br>unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;old_readkmem&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fd,&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;buf,size_t&nbsp;off,unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;size)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用read方式读取kmem中一定长度内容</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(lseek(fd,&nbsp;off,SEEK_SET)</span><span style="color: #000000;">!=</span><span style="color: #000000;">off)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">perror("fd&nbsp;lseek");&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(read(fd,&nbsp;buf,size)</span><span style="color: #000000;">!=</span><span style="color: #000000;">size)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">perror("fd&nbsp;read");&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>}<br><br><br>unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;&nbsp;readkmem&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fd,&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;buf,&nbsp;size_t&nbsp;off,&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;size)</span><span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">用mmap方式从kmem中读取一定长度内容</span><br><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;&nbsp;moff,&nbsp;roff;<br>&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sz&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getpagesize(); </span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;kmap;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;&nbsp;ret_old&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;old_readkmem(fd,&nbsp;buf,&nbsp;off,&nbsp;size); </span><span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">先用老方法读取,不行再用mmap</span><br><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ret_old&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ret_old;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;moff&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((size_t)(off</span><span style="color: #000000;">/</span><span style="color: #000000;">sz))&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;sz;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;"></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;roff&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;off&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;moff;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;"></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;kmap&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mmap(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;size</span><span style="color: #000000;">+</span><span style="color: #000000;">sz,&nbsp;PROT_READ,&nbsp;MAP_PRIVATE,&nbsp;fd,&nbsp;moff); </span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kmap&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;MAP_FAILED)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(</span><span style="color: #000000;">"</span><span style="color: #000000;">readkmem:&nbsp;mmap</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy&nbsp;(buf,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">kmap[roff],&nbsp;size);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(munmap(kmap,&nbsp;size)&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(</span><span style="color: #000000;">"</span><span style="color: #000000;">readkmem:&nbsp;munmap</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;size;<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">argv)<br><br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;sys_call_off;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;kmem_fd;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;/dev/kmem文件描述符</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;sct;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;sc_asm[CALLOFF],</span><span style="color: #000000;">*</span><span style="color: #000000;">p;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;获得IDTR寄存器的值&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;asm&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">sidt&nbsp;%0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">=m</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;(idtr));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">idtr&nbsp;base&nbsp;at&nbsp;0x%X\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)idtr.</span><span style="color: #0000ff;">base</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;打开kmem&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;kmem_fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">/dev/kmem</span><span style="color: #000000;">"</span><span style="color: #000000;">,O_RDONLY);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(kmem_fd</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;从IDT读出0x80向量&nbsp;(syscall)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;readkmem&nbsp;(kmem_fd,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">idt,idtr.</span><span style="color: #0000ff;">base</span><span style="color: #000000;">+</span><span style="color: #000000;">8</span><span style="color: #000000;">*</span><span style="color: #000000;">0x80</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(idt));&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">idtr.base+8*0x80&nbsp;表示80中断描述符的偏移</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;sys_call_off&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(idt.off2&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;idt.off1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">idt.off2&nbsp;表示地址的前16位，得到syscall地址</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">idt80:&nbsp;flags=%X&nbsp;sel=%X&nbsp;off=%X\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, (unsigned)idt.flags,(unsigned)idt.sel,sys_call_off);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;寻找sys_call_table的地址&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;readkmem&nbsp;(kmem_fd,&nbsp;sc_asm,sys_call_off,CALLOFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)memmem&nbsp;(sc_asm,CALLOFF,</span><span style="color: #000000;">"</span><span style="color: #000000;">\xff\x14\x85</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">只要找到邻近int&nbsp;$0x80入口点system_call的call&nbsp;sys_call_table(,eax,4)指令的机器指令就可以了,call&nbsp;something(,eax,4)指令的机器码是0xff&nbsp;0x14&nbsp;0x85，因此搜索这个字符串。&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;sct&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">(unsigned</span><span style="color: #000000;">*</span><span style="color: #000000;">)(p</span><span style="color: #000000;">+</span><span style="color: #000000;">3</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">sys_call_table地址就在0xff&nbsp;0x14&nbsp;0x85之后</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(p)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">sys_call_table&nbsp;at&nbsp;0x%x,&nbsp;call&nbsp;dispatch&nbsp;at&nbsp;0x%x\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;sct,&nbsp;p);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;close(kmem_fd);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br>测试结果:<br><br><img src="http://www.phpweblog.net/images/phpweblog_net/gary/get_sys_call_table.jpg" border="0"><br><br><br>  <img src ="http://www.phpweblog.net/GaRY/aggbug/1385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-17 18:04 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/17/get_sys_call_table_address.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gina</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/07/gina_log_password.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Thu, 07 Jun 2007 13:45:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/07/gina_log_password.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1366.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/07/gina_log_password.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1366.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1366.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;UNICODE</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Winwlx.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;LOGFILE&nbsp;L"c:\\logoninfo.log"</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将这个DLL拷到system32目录下，并在注册表中加入：<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">HKEY_LOCAL_MACHINE\Software\Microsoft\Windows&nbsp;NT\CurrentVersion\Winlogon<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加一个GinaDLL,类型RegSZ,&nbsp;内容为你的dll名，如:'fakegina.dll'.<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重启机器，系统就会使用你的gina</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxNegotiate)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwWinlogonVersion,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PDWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwDllVersion<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxInitialize)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LPWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpWinsta,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hWlx,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pvReserved,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWinlogonFunctions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;VOID<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplaySASNotice)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLoggedOutSAS)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PLUID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pAuthenticationId,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PSID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLogonSid,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PDWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PHANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phToken,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWLX_MPR_NOTIFY_INFO&nbsp;&nbsp;&nbsp;&nbsp;pNprNotifyInfo,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProfile<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxActivateUserShell)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszMprLogonScript,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnvironment<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLoggedOnSAS)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pReserved<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;VOID<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplayLockedNotice)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxWkstaLockedSAS)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxIsLockOk)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxIsLogoffOk)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;VOID<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLogoff)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;VOID<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxShutdown)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShutdownType<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;NEW&nbsp;for&nbsp;version&nbsp;1.1<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxScreenSaverNotify)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSecure);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxStartApplication)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnvironment,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszCmdLine<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;New&nbsp;for&nbsp;1.3<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxNetworkProviderLoad)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWLX_MPR_NOTIFY_INFO&nbsp;&nbsp;&nbsp;&nbsp;pNprNotifyInfo<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplayStatusMessage)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HDESK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hDesktop,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTitle,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMessage<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxGetStatusMessage)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMessage,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwBufferSize<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;BOOL<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>(WINAPI&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxRemoveStatusMessage)(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxNegotiate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxNegotiate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxInitialize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxInitialize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplaySASNotice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplaySASNotice&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLoggedOutSAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLoggedOutSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxActivateUserShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxActivateUserShell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLoggedOnSAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLoggedOnSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplayLockedNotice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplayLockedNotice&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxWkstaLockedSAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxWkstaLockedSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxIsLockOk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxIsLockOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxIsLogoffOk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxIsLogoffOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxLogoff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLogoff&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxShutdown&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxShutdown&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxScreenSaverNotify&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxScreenSaverNotify&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxStartApplication&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxStartApplication&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxNetworkProviderLoad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxNetworkProviderLoad&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxDisplayStatusMessage&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplayStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxGetStatusMessage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxGetStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>pWlxRemoveStatusMessage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxRemoveStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>HINSTANCE&nbsp;hGina&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_4187_6302_Open_Image onclick="this.style.display='none'; Codehighlighter1_4187_6302_Open_Text.style.display='none'; Codehighlighter1_4187_6302_Closed_Image.style.display='inline'; Codehighlighter1_4187_6302_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_4187_6302_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4187_6302_Closed_Text.style.display='none'; Codehighlighter1_4187_6302_Open_Image.style.display='inline'; Codehighlighter1_4187_6302_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>BOOL&nbsp;LoadMsGina()</span><span id=Codehighlighter1_4187_6302_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_4187_6302_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;hGina&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LoadLibrary(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">msgina.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_4237_6277_Open_Image onclick="this.style.display='none'; Codehighlighter1_4237_6277_Open_Text.style.display='none'; Codehighlighter1_4237_6277_Closed_Image.style.display='inline'; Codehighlighter1_4237_6277_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_4237_6277_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4237_6277_Closed_Text.style.display='none'; Codehighlighter1_4237_6277_Open_Image.style.display='inline'; Codehighlighter1_4237_6277_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hGina)</span><span id=Codehighlighter1_4237_6277_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_4237_6277_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxNegotiate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxNegotiate)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxNegotiate</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxInitialize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxInitialize)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxInitialize</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplaySASNotice&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxDisplaySASNotice&nbsp;)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxDisplaySASNotice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLoggedOutSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxLoggedOutSAS)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxLoggedOutSAS</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxActivateUserShell&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxActivateUserShell)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxActivateUserShell</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLoggedOnSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxLoggedOnSAS)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxLoggedOnSAS</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplayLockedNotice&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxDisplayLockedNotice)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxDisplayLockedNotice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxWkstaLockedSAS&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxWkstaLockedSAS)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxWkstaLockedSAS</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxIsLockOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxIsLockOk)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxIsLockOk</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxIsLogoffOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxIsLogoffOk)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxIsLogoffOk</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLogoff&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxLogoff)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxLogoff</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxShutdown&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxShutdown)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxShutdown</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxScreenSaverNotify&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxScreenSaverNotify)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxScreenSaverNotify</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxStartApplication&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxStartApplication)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxStartApplication</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxNetworkProviderLoad&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxNetworkProviderLoad)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxNetworkProviderLoad</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplayStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxDisplayStatusMessage)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxDisplayStatusMessage</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxGetStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxGetStatusMessage)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxGetStatusMessage</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prcWlxRemoveStatusMessage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(pWlxRemoveStatusMessage)GetProcAddress(hGina,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WlxRemoveStatusMessage</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxNegotiate&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxInitialize&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxDisplaySASNotice&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxLoggedOutSAS<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxActivateUserShell&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxLoggedOnSAS&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxDisplayLockedNotice<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxWkstaLockedSAS&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxIsLockOk&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxIsLogoffOk&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxLogoff<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxShutdown&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxScreenSaverNotify&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxStartApplication<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxNetworkProviderLoad&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxDisplayStatusMessage&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxGetStatusMessage<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;prcWlxRemoveStatusMessage;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>HINSTANCE&nbsp;myHandle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实例句柄</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_6354_6473_Open_Image onclick="this.style.display='none'; Codehighlighter1_6354_6473_Open_Text.style.display='none'; Codehighlighter1_6354_6473_Closed_Image.style.display='inline'; Codehighlighter1_6354_6473_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_6354_6473_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6354_6473_Closed_Text.style.display='none'; Codehighlighter1_6354_6473_Open_Image.style.display='inline'; Codehighlighter1_6354_6473_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_6354_6473_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6354_6473_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;hWlx;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;LPWSTR&nbsp;station;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">PWLX_DISPATCH_VERSION_1_3&nbsp;pWlxFuncs;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;HANDLE&nbsp;hDllInstance;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;UserToken;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;GINA_CONTEXT,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;PGINA_CONTEXT;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ReleaseMsGina()<br><img id=Codehighlighter1_6528_6568_Open_Image onclick="this.style.display='none'; Codehighlighter1_6528_6568_Open_Text.style.display='none'; Codehighlighter1_6528_6568_Closed_Image.style.display='inline'; Codehighlighter1_6528_6568_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_6528_6568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6528_6568_Closed_Text.style.display='none'; Codehighlighter1_6528_6568_Open_Image.style.display='inline'; Codehighlighter1_6528_6568_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_6528_6568_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6528_6568_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_6541_6566_Open_Image onclick="this.style.display='none'; Codehighlighter1_6541_6566_Open_Text.style.display='none'; Codehighlighter1_6541_6566_Closed_Image.style.display='inline'; Codehighlighter1_6541_6566_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_6541_6566_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6541_6566_Closed_Text.style.display='none'; Codehighlighter1_6541_6566_Open_Image.style.display='inline'; Codehighlighter1_6541_6566_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hGina)</span><span id=Codehighlighter1_6541_6566_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6541_6566_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeLibrary(hGina);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WriteInfo(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;buf);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示ASCII字符串信息</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WriteInfoW(PWSTR&nbsp;WideStr);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示unicode字符串信息</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SaveLog(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;c,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">日志保存</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;DllMain(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;HINSTANCE&nbsp;hinstDLL,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;fdwReason,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPVOID&nbsp;lpvReserved<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;)<br><img id=Codehighlighter1_6786_7285_Open_Image onclick="this.style.display='none'; Codehighlighter1_6786_7285_Open_Text.style.display='none'; Codehighlighter1_6786_7285_Closed_Image.style.display='inline'; Codehighlighter1_6786_7285_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_6786_7285_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6786_7285_Closed_Text.style.display='none'; Codehighlighter1_6786_7285_Open_Image.style.display='inline'; Codehighlighter1_6786_7285_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_6786_7285_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6786_7285_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_6807_7268_Open_Image onclick="this.style.display='none'; Codehighlighter1_6807_7268_Open_Text.style.display='none'; Codehighlighter1_6807_7268_Closed_Image.style.display='inline'; Codehighlighter1_6807_7268_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_6807_7268_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6807_7268_Closed_Text.style.display='none'; Codehighlighter1_6807_7268_Open_Image.style.display='inline'; Codehighlighter1_6807_7268_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(fdwReason)</span><span id=Codehighlighter1_6807_7268_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6807_7268_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;DLL_PROCESS_ATTACH:<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">------------------------------------------------\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">myHandle&nbsp;=&nbsp;hinstDLL;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">记录实例句柄，备用，本例没有用到。</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(LoadMsGina())&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加载MyGina</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_6986_7060_Open_Image onclick="this.style.display='none'; Codehighlighter1_6986_7060_Open_Text.style.display='none'; Codehighlighter1_6986_7060_Closed_Image.style.display='inline'; Codehighlighter1_6986_7060_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_6986_7060_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_6986_7060_Closed_Text.style.display='none'; Codehighlighter1_6986_7060_Open_Image.style.display='inline'; Codehighlighter1_6986_7060_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_6986_7060_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_6986_7060_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Init&nbsp;gina&nbsp;ok<img src="http://www.phpweblog.net/Images/dot.gif">&nbsp;\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_7071_7151_Open_Image onclick="this.style.display='none'; Codehighlighter1_7071_7151_Open_Text.style.display='none'; Codehighlighter1_7071_7151_Closed_Image.style.display='inline'; Codehighlighter1_7071_7151_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_7071_7151_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_7071_7151_Closed_Text.style.display='none'; Codehighlighter1_7071_7151_Open_Image.style.display='inline'; Codehighlighter1_7071_7151_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_7071_7151_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_7071_7151_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Init&nbsp;gina&nbsp;false&nbsp;<img src="http://www.phpweblog.net/Images/dot.gif">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;DLL_PROCESS_DETACH:<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseMsGina();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">释放MyGina</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">release&nbsp;gina&nbsp;ok&nbsp;\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>WlxActivateUserShell&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pszMprLogonScript,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pEnvironment)<br><img id=Codehighlighter1_7418_7587_Open_Image onclick="this.style.display='none'; Codehighlighter1_7418_7587_Open_Text.style.display='none'; Codehighlighter1_7418_7587_Closed_Image.style.display='inline'; Codehighlighter1_7418_7587_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_7418_7587_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_7418_7587_Closed_Text.style.display='none'; Codehighlighter1_7418_7587_Open_Image.style.display='inline'; Codehighlighter1_7418_7587_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_7418_7587_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_7418_7587_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxActivateUserShell&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxActivateUserShell&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszMprLogonScript,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnvironment);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>VOID&nbsp;WINAPI&nbsp;WlxDisplaySASNotice&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext)<br><img id=Codehighlighter1_7645_7729_Open_Image onclick="this.style.display='none'; Codehighlighter1_7645_7729_Open_Text.style.display='none'; Codehighlighter1_7645_7729_Closed_Image.style.display='inline'; Codehighlighter1_7645_7729_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_7645_7729_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_7645_7729_Closed_Text.style.display='none'; Codehighlighter1_7645_7729_Open_Image.style.display='inline'; Codehighlighter1_7645_7729_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_7645_7729_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_7645_7729_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxDisplaySASNotice&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplaySASNotice(pWlxContext);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxInitialize&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPWSTR&nbsp;&nbsp;lpWinsta,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;&nbsp;hWlx,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;pvReserved,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;pWinlogonFunctions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pWlxContext)<br><img id=Codehighlighter1_7871_8020_Open_Image onclick="this.style.display='none'; Codehighlighter1_7871_8020_Open_Text.style.display='none'; Codehighlighter1_7871_8020_Closed_Image.style.display='inline'; Codehighlighter1_7871_8020_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_7871_8020_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_7871_8020_Closed_Text.style.display='none'; Codehighlighter1_7871_8020_Open_Image.style.display='inline'; Codehighlighter1_7871_8020_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_7871_8020_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_7871_8020_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxInitialize&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxInitialize&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpWinsta,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hWlx,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pvReserved,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWinlogonFunctions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;WlxLoggedOnSAS&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pReserved)<br><img id=Codehighlighter1_8110_8236_Open_Image onclick="this.style.display='none'; Codehighlighter1_8110_8236_Open_Text.style.display='none'; Codehighlighter1_8110_8236_Closed_Image.style.display='inline'; Codehighlighter1_8110_8236_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8110_8236_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8110_8236_Closed_Text.style.display='none'; Codehighlighter1_8110_8236_Open_Image.style.display='inline'; Codehighlighter1_8110_8236_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_8110_8236_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_8110_8236_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxLoggedOnSAS&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;prcWlxLoggedOnSAS&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pReserved);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在启动到登陆界面时,调用此函数</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;WlxLoggedOutSAS&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PLUID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pAuthenticationId,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PSID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLogonSid,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PDWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PHANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phToken,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWLX_MPR_NOTIFY_INFO&nbsp;pMprNotifyInfo,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProfile)<br><img id=Codehighlighter1_8571_9991_Open_Image onclick="this.style.display='none'; Codehighlighter1_8571_9991_Open_Text.style.display='none'; Codehighlighter1_8571_9991_Closed_Image.style.display='inline'; Codehighlighter1_8571_9991_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8571_9991_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8571_9991_Closed_Text.style.display='none'; Codehighlighter1_8571_9991_Open_Image.style.display='inline'; Codehighlighter1_8571_9991_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_8571_9991_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_8571_9991_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iRet</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;pszUserName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;pszDomain</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;pszPassword</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWSTR&nbsp;pszOldPassword</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSTR&nbsp;pLogonTime</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxLoggedOutSAS&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iRet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;prcWlxLoggedOutSAS(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pAuthenticationId,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLogonSid,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phToken,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMprNotifyInfo,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pProfile);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(iRet&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WLX_SAS_ACTION_LOGON)&nbsp;<br><img id=Codehighlighter1_8993_9943_Open_Image onclick="this.style.display='none'; Codehighlighter1_8993_9943_Open_Text.style.display='none'; Codehighlighter1_8993_9943_Closed_Image.style.display='inline'; Codehighlighter1_8993_9943_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_8993_9943_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8993_9943_Closed_Text.style.display='none'; Codehighlighter1_8993_9943_Open_Image.style.display='inline'; Codehighlighter1_8993_9943_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_8993_9943_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_8993_9943_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYSTEMTIME&nbsp;stime;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetLocalTime(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">stime);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(pLogonTime,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">LoginTime&nbsp;:&nbsp;%d.%d.%d&nbsp;%d:%d:%d\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stime.wYear,&nbsp;stime.wMonth,&nbsp;stime.wDay,&nbsp;stime.wHour,&nbsp;stime.wMinute,&nbsp;stime.wSecond);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(pLogonTime);&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;copy&nbsp;pMprNotifyInfo&nbsp;and&nbsp;pLogonSid&nbsp;for&nbsp;later&nbsp;use&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszUserName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pMprNotifyInfo</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">pszUserName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pszUserName</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_9383_9451_Open_Image onclick="this.style.display='none'; Codehighlighter1_9383_9451_Open_Text.style.display='none'; Codehighlighter1_9383_9451_Closed_Image.style.display='inline'; Codehighlighter1_9383_9451_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_9383_9451_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_9383_9451_Closed_Text.style.display='none'; Codehighlighter1_9383_9451_Open_Image.style.display='inline'; Codehighlighter1_9383_9451_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_9383_9451_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_9383_9451_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Username&nbsp;&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfoW(pszUserName);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszDomain</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pMprNotifyInfo</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">pszDomain;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pszDomain</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_9534_9601_Open_Image onclick="this.style.display='none'; Codehighlighter1_9534_9601_Open_Text.style.display='none'; Codehighlighter1_9534_9601_Closed_Image.style.display='inline'; Codehighlighter1_9534_9601_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_9534_9601_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_9534_9601_Closed_Text.style.display='none'; Codehighlighter1_9534_9601_Open_Image.style.display='inline'; Codehighlighter1_9534_9601_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_9534_9601_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_9534_9601_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Domain&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfoW(pszDomain);&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszPassword&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pMprNotifyInfo</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">pszPassword;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pszPassword</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_9689_9759_Open_Image onclick="this.style.display='none'; Codehighlighter1_9689_9759_Open_Text.style.display='none'; Codehighlighter1_9689_9759_Closed_Image.style.display='inline'; Codehighlighter1_9689_9759_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_9689_9759_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_9689_9759_Closed_Text.style.display='none'; Codehighlighter1_9689_9759_Open_Image.style.display='inline'; Codehighlighter1_9689_9759_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_9689_9759_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_9689_9759_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PassWord&nbsp;&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfoW(pszPassword);&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszOldPassword</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pMprNotifyInfo</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">pszOldPassword;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pszOldPassword</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;<br><img id=Codehighlighter1_9859_9933_Open_Image onclick="this.style.display='none'; Codehighlighter1_9859_9933_Open_Text.style.display='none'; Codehighlighter1_9859_9933_Closed_Image.style.display='inline'; Codehighlighter1_9859_9933_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_9859_9933_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_9859_9933_Closed_Text.style.display='none'; Codehighlighter1_9859_9933_Open_Image.style.display='inline'; Codehighlighter1_9859_9933_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_9859_9933_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_9859_9933_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">OldPassword:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteInfoW(pszOldPassword);&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;iRet;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>VOID&nbsp;WINAPI&nbsp;WlxLogoff&nbsp;(PVOID&nbsp;pWlxContext)<br><img id=Codehighlighter1_10038_10107_Open_Image onclick="this.style.display='none'; Codehighlighter1_10038_10107_Open_Text.style.display='none'; Codehighlighter1_10038_10107_Closed_Image.style.display='inline'; Codehighlighter1_10038_10107_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10038_10107_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10038_10107_Closed_Text.style.display='none'; Codehighlighter1_10038_10107_Open_Image.style.display='inline'; Codehighlighter1_10038_10107_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10038_10107_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10038_10107_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxLogoff&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;prcWlxLogoff(pWlxContext);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxNegotiate&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;&nbsp;dwWinlogonVersion,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PDWORD&nbsp;pdwDllVersion)<br><img id=Codehighlighter1_10189_10297_Open_Image onclick="this.style.display='none'; Codehighlighter1_10189_10297_Open_Text.style.display='none'; Codehighlighter1_10189_10297_Closed_Image.style.display='inline'; Codehighlighter1_10189_10297_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10189_10297_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10189_10297_Closed_Text.style.display='none'; Codehighlighter1_10189_10297_Open_Image.style.display='inline'; Codehighlighter1_10189_10297_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10189_10297_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10189_10297_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxNegotiate&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxNegotiate&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwWinlogonVersion,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwDllVersion);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxScreenSaverNotify&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;BOOL&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pSecure)<br><img id=Codehighlighter1_10376_10489_Open_Image onclick="this.style.display='none'; Codehighlighter1_10376_10489_Open_Text.style.display='none'; Codehighlighter1_10376_10489_Closed_Image.style.display='inline'; Codehighlighter1_10376_10489_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10376_10489_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10376_10489_Closed_Text.style.display='none'; Codehighlighter1_10376_10489_Open_Image.style.display='inline'; Codehighlighter1_10376_10489_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10376_10489_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10376_10489_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxScreenSaverNotify&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxScreenSaverNotify&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSecure);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>VOID&nbsp;WINAPI&nbsp;WlxShutdown(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;ShutdownType)<br><img id=Codehighlighter1_10560_10644_Open_Image onclick="this.style.display='none'; Codehighlighter1_10560_10644_Open_Text.style.display='none'; Codehighlighter1_10560_10644_Closed_Image.style.display='inline'; Codehighlighter1_10560_10644_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10560_10644_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10560_10644_Closed_Text.style.display='none'; Codehighlighter1_10560_10644_Open_Image.style.display='inline'; Codehighlighter1_10560_10644_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10560_10644_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10560_10644_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxShutdown&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;prcWlxShutdown(pWlxContext,&nbsp;ShutdownType);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxStartApplication&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pEnvironment,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pszCmdLine)<br><img id=Codehighlighter1_10768_10923_Open_Image onclick="this.style.display='none'; Codehighlighter1_10768_10923_Open_Text.style.display='none'; Codehighlighter1_10768_10923_Closed_Image.style.display='inline'; Codehighlighter1_10768_10923_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10768_10923_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10768_10923_Closed_Text.style.display='none'; Codehighlighter1_10768_10923_Open_Image.style.display='inline'; Codehighlighter1_10768_10923_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10768_10923_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10768_10923_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxStartApplication&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxStartApplication&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszDesktopName,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnvironment,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pszCmdLine);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;WlxWkstaLockedSAS&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;dwSasType<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>)<br><img id=Codehighlighter1_10998_11109_Open_Image onclick="this.style.display='none'; Codehighlighter1_10998_11109_Open_Text.style.display='none'; Codehighlighter1_10998_11109_Closed_Image.style.display='inline'; Codehighlighter1_10998_11109_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10998_11109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10998_11109_Closed_Text.style.display='none'; Codehighlighter1_10998_11109_Open_Image.style.display='inline'; Codehighlighter1_10998_11109_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10998_11109_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_10998_11109_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxWkstaLockedSAS&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxWkstaLockedSAS&nbsp;(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSasType<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>VOID&nbsp;WINAPI&nbsp;WlxDisplayLockedNotice(PVOID&nbsp;pWlxContext)<br><img id=Codehighlighter1_11166_11256_Open_Image onclick="this.style.display='none'; Codehighlighter1_11166_11256_Open_Text.style.display='none'; Codehighlighter1_11166_11256_Closed_Image.style.display='inline'; Codehighlighter1_11166_11256_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_11166_11256_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11166_11256_Closed_Text.style.display='none'; Codehighlighter1_11166_11256_Open_Image.style.display='inline'; Codehighlighter1_11166_11256_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_11166_11256_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_11166_11256_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxDisplayLockedNotice&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;prcWlxDisplayLockedNotice(pWlxContext);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxDisplayStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;HDESK&nbsp;hDesktop,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;dwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pTitle,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pMessage<br><img id=Codehighlighter1_11390_11556_Open_Image onclick="this.style.display='none'; Codehighlighter1_11390_11556_Open_Text.style.display='none'; Codehighlighter1_11390_11556_Closed_Image.style.display='inline'; Codehighlighter1_11390_11556_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_11390_11556_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11390_11556_Closed_Text.style.display='none'; Codehighlighter1_11390_11556_Open_Image.style.display='inline'; Codehighlighter1_11390_11556_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;)</span><span id=Codehighlighter1_11390_11556_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_11390_11556_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxDisplayStatusMessage&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxDisplayStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hDesktop,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTitle,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMessage<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxGetStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWSTR&nbsp;pMessage,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;dwBufferSize<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>)<br><img id=Codehighlighter1_11676_11828_Open_Image onclick="this.style.display='none'; Codehighlighter1_11676_11828_Open_Text.style.display='none'; Codehighlighter1_11676_11828_Closed_Image.style.display='inline'; Codehighlighter1_11676_11828_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_11676_11828_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11676_11828_Closed_Text.style.display='none'; Codehighlighter1_11676_11828_Open_Image.style.display='inline'; Codehighlighter1_11676_11828_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_11676_11828_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_11676_11828_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxGetStatusMessage&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxGetStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdwOptions,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMessage,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwBufferSize<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxIsLockOk(PVOID&nbsp;pWlxContext)<br><img id=Codehighlighter1_11874_11952_Open_Image onclick="this.style.display='none'; Codehighlighter1_11874_11952_Open_Text.style.display='none'; Codehighlighter1_11874_11952_Closed_Image.style.display='inline'; Codehighlighter1_11874_11952_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_11874_11952_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11874_11952_Closed_Text.style.display='none'; Codehighlighter1_11874_11952_Open_Image.style.display='inline'; Codehighlighter1_11874_11952_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_11874_11952_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_11874_11952_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxIsLockOk&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxIsLockOk(pWlxContext);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxIsLogoffOk(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>)<br><img id=Codehighlighter1_12004_12089_Open_Image onclick="this.style.display='none'; Codehighlighter1_12004_12089_Open_Text.style.display='none'; Codehighlighter1_12004_12089_Closed_Image.style.display='inline'; Codehighlighter1_12004_12089_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12004_12089_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12004_12089_Closed_Text.style.display='none'; Codehighlighter1_12004_12089_Open_Image.style.display='inline'; Codehighlighter1_12004_12089_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12004_12089_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12004_12089_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxIsLogoffOk&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxIsLogoffOk(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxNetworkProviderLoad(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PWLX_MPR_NOTIFY_INFO&nbsp;pNprNotifyInfo<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>)<br><img id=Codehighlighter1_12191_12313_Open_Image onclick="this.style.display='none'; Codehighlighter1_12191_12313_Open_Text.style.display='none'; Codehighlighter1_12191_12313_Closed_Image.style.display='inline'; Codehighlighter1_12191_12313_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12191_12313_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12191_12313_Closed_Text.style.display='none'; Codehighlighter1_12191_12313_Open_Image.style.display='inline'; Codehighlighter1_12191_12313_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12191_12313_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12191_12313_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxNetworkProviderLoad&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxNetworkProviderLoad(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pNprNotifyInfo<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;WINAPI&nbsp;WlxRemoveStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;PVOID&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>)<br><img id=Codehighlighter1_12374_12481_Open_Image onclick="this.style.display='none'; Codehighlighter1_12374_12481_Open_Text.style.display='none'; Codehighlighter1_12374_12481_Closed_Image.style.display='inline'; Codehighlighter1_12374_12481_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12374_12481_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12374_12481_Closed_Text.style.display='none'; Codehighlighter1_12374_12481_Open_Image.style.display='inline'; Codehighlighter1_12374_12481_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12374_12481_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12374_12481_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WriteInfo("WlxRemoveStatusMessage&nbsp;\r\n");</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;prcWlxRemoveStatusMessage(<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pWlxContext<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WriteInfo(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;buf)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示ASCII字符串信息</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_12526_12632_Open_Image onclick="this.style.display='none'; Codehighlighter1_12526_12632_Open_Text.style.display='none'; Codehighlighter1_12526_12632_Closed_Image.style.display='inline'; Codehighlighter1_12526_12632_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12526_12632_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12526_12632_Closed_Text.style.display='none'; Codehighlighter1_12526_12632_Open_Image.style.display='inline'; Codehighlighter1_12526_12632_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12526_12632_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12526_12632_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(TRUE)<br><img id=Codehighlighter1_12555_12598_Open_Image onclick="this.style.display='none'; Codehighlighter1_12555_12598_Open_Text.style.display='none'; Codehighlighter1_12555_12598_Closed_Image.style.display='inline'; Codehighlighter1_12555_12598_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_12555_12598_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12555_12598_Closed_Text.style.display='none'; Codehighlighter1_12555_12598_Open_Image.style.display='inline'; Codehighlighter1_12555_12598_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_12555_12598_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12555_12598_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">buf[i])<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SaveLog(buf,i);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">日志保存</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;WriteInfoW(PWSTR&nbsp;WideStr)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示unicode字符串信息</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_12683_13088_Open_Image onclick="this.style.display='none'; Codehighlighter1_12683_13088_Open_Text.style.display='none'; Codehighlighter1_12683_13088_Closed_Image.style.display='inline'; Codehighlighter1_12683_13088_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12683_13088_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12683_13088_Closed_Text.style.display='none'; Codehighlighter1_12683_13088_Open_Image.style.display='inline'; Codehighlighter1_12683_13088_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_12683_13088_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_12683_13088_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取unicode字符串的字符个数</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nstrlen</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">WideCharToMultiByte(CP_ACP,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,WideStr,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,NULL,NULL);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在进程堆中分配空间</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PSTR&nbsp;tempStr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(PSTR)HeapAlloc(GetProcessHeap(),</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,nstrlen);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(tempStr</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把unicode字符串转换为ASCII字符串</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WideCharToMultiByte(CP_ACP,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,WideStr,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempStr,nstrlen,NULL,NULL);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(tempStr);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WriteInfo(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">释放堆空间</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HeapFree(GetProcessHeap(),</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,tempStr);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SaveLog(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;c,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">日志保存函数</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_13131_13475_Open_Image onclick="this.style.display='none'; Codehighlighter1_13131_13475_Open_Text.style.display='none'; Codehighlighter1_13131_13475_Closed_Image.style.display='inline'; Codehighlighter1_13131_13475_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_13131_13475_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13131_13475_Closed_Text.style.display='none'; Codehighlighter1_13131_13475_Open_Image.style.display='inline'; Codehighlighter1_13131_13475_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_13131_13475_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_13131_13475_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WCHAR&nbsp;name[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LOGFILE;&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;HANDLE&nbsp;hFile;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;In;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WCHAR&nbsp;Buff[</span><span style="COLOR: #000000">512</span><span style="COLOR: #000000">];<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;hFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateFile(name,&nbsp;GENERIC_WRITE,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,&nbsp;NULL);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hFile&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;INVALID_HANDLE_VALUE)<br><img id=Codehighlighter1_13340_13356_Open_Image onclick="this.style.display='none'; Codehighlighter1_13340_13356_Open_Text.style.display='none'; Codehighlighter1_13340_13356_Closed_Image.style.display='inline'; Codehighlighter1_13340_13356_Closed_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_13340_13356_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13340_13356_Closed_Text.style.display='none'; Codehighlighter1_13340_13356_Open_Image.style.display='inline'; Codehighlighter1_13340_13356_Open_Text.style.display='inline';" src="http://www.phpweblog.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_13340_13356_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.phpweblog.net/Images/dot.gif"></span><span id=Codehighlighter1_13340_13356_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;SetFilePointer(hFile,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;FILE_END);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;WriteFile(hFile,&nbsp;c,&nbsp;num,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">In,&nbsp;NULL);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;CloseHandle(hFile);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">关闭文件</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">&nbsp;</span></div>
<br><br>本来想将此思想移植到vista上,可是vista已经不再使用Gina做登录交互了.转而使用新的CredentialProvider.我查了查msdn,需要attach原有的密码框控件做wrap获取密码,并且ms做了一定的加密,需要用lsa相关函数解密回来.<br>由于我对com编程一窍不通,而且最近要考试了,估计也没时间研究了...所以就期待其他高人写出来吧<br>附带上ms的CredentialProvider<a title=例子 href="http://www.phpweblog.net/Files/GaRY/RTMCredentialProviderSamples__FINAL.zip">例子</a>.
<img src ="http://www.phpweblog.net/GaRY/aggbug/1366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-07 21:45 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/07/gina_log_password.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ring0 Detour Demo</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/05/Ring0_Detour_Demo.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Tue, 05 Jun 2007 11:32:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/05/Ring0_Detour_Demo.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1348.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/05/Ring0_Detour_Demo.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1348.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1348.html</trackback:ping><description><![CDATA[头一次写Driver,头一次用WinDbg+Vmware,头一次在ring0下做Detour.<br>不可思议的是,虽然调试出来错误很多,但是居然没有一次BSOD..<br>记录一下,Hook了ZwQuerySystemInformation做进程隐藏.<br>测试环境windows 2000 server sp4:<br><br>Hook前:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">kd</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;u&nbsp;nt</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ZwQuerySystemInformation<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>nt</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ZwQuerySystemInformation</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011aa&nbsp;b897000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">97h<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011af&nbsp;8d542404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">[esp</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b3&nbsp;cd2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2Eh<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b5&nbsp;c21000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10h<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b8&nbsp;8bff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edi</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">edi</span></div>
<br>Hook后:<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">kd</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;u&nbsp;hookproc</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Jmp_ZwQuerySystemInformation<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>hookproc</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Jmp_ZwQuerySystemInformation&nbsp;[e</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">\tmp\rk\hide_proc\hide_proc</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">c&nbsp;@&nbsp;</span><span style="COLOR: #000000">141</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504d0&nbsp;b897000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">97h<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504d5&nbsp;eaaf1140800800&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp; 0008:804011AF<br></span><span style="COLOR: #000000"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504dc&nbsp;</span><span style="COLOR: #000000">90</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504dd&nbsp;</span><span style="COLOR: #000000">90</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504de&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504df&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504e0&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>f41504e1&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>kd</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;u&nbsp;nt</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ZwQuerySystemInformation<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>nt</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ZwQuerySystemInformation</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011aa&nbsp;e941f3d473&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hookproc</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Fake_ZwQuerySystemInformation&nbsp;(f41504f0)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011af&nbsp;8d542404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">[esp</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b3&nbsp;cd2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2Eh<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b5&nbsp;c21000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10h<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011b8&nbsp;8bff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edi</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">edi<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>nt</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">ZwQuerySystemTime</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011ba&nbsp;b898000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">98h<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011bf&nbsp;8d542404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edx</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">[esp</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>804011c3&nbsp;cd2e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2Eh</span></div>
<img src ="http://www.phpweblog.net/GaRY/aggbug/1348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-05 19:32 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/05/Ring0_Detour_Demo.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Password Finder</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/04/windows_passowrd_finder.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Mon, 04 Jun 2007 11:55:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/04/windows_passowrd_finder.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1343.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/04/windows_passowrd_finder.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1343.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1343.html</trackback:ping><description><![CDATA[<p>&nbsp;这个是isno从LSAView里逆向后改写的代码,转过来:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;windows.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#</span><span style="COLOR: #008000">include&nbsp;&lt;ntsecapi.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#</span><span style="COLOR: #008000">include&nbsp;&lt;tchar.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>#</span><span style="COLOR: #008000">include&nbsp;&lt;stdio.h&gt;</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">pragma&nbsp;comment(lib,"advapi32.lib")</span><span style="COLOR: #008000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>int&nbsp;_tmain(int&nbsp;argc</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[]</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;envp[])<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nRetCode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;private_data[</span><span style="COLOR: #000000">0x500</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">};<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_len;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LSA_OBJECT_ATTRIBUTES&nbsp;lsa_object_attr;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LSA_HANDLE&nbsp;lsa_handle;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PLSA_UNICODE_STRING&nbsp;plsa_private_data;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LSA_UNICODE_STRING&nbsp;lsa_keyname;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;NTSTATUS&nbsp;status;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lsa_object_attr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(lsa_object_attr));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;lsa_object_attr</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(LSA_OBJECT_ATTRIBUTES);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LsaOpenPolicy(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lsa_object_attr</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x800</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lsa_handle);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;plsa_private_data&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(PLSA_UNICODE_STRING)malloc(</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(LSA_UNICODE_STRING));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;plsa_private_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x500</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;plsa_private_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">MaximumLength&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x500</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;plsa_private_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(PWSTR)malloc(</span><span style="COLOR: #000000">0x500</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;lsa_keyname</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">MaximumLength&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x200</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;lsa_keyname</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(PWSTR)malloc(</span><span style="COLOR: #000000">0x200</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;wcscpy(lsa_keyname</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Buffer</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DefaultPassword</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;lsa_keyname</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Length&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wcslen(lsa_keyname</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">Buffer)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;LsaRetrievePrivateData(lsa_handle</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lsa_keyname</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">plsa_private_data);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LsaClose(lsa_handle);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(status&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008080">printf</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[-]&nbsp;LsaRetrievePrivateData&nbsp;failed:&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LsaNtStatusToWinError(status));<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WideCharToMultiByte(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;plsa_private_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Buffer</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plsa_private_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Length</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private_data</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008080">sizeof</span><span style="COLOR: #000000">(private_data)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(ret&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;{<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008080">printf</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[-]&nbsp;WideCharToMultiByte&nbsp;failed:%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;GetLastError());<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;data_len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ret;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008080">printf</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Default&nbsp;Password:&nbsp;%s\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;private_data);<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nRetCode;<br><img src="http://www.phpweblog.net/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<img src ="http://www.phpweblog.net/GaRY/aggbug/1343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-04 19:55 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/04/windows_passowrd_finder.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]Windows Vista有趣的标签SID</title><link>http://www.phpweblog.net/GaRY/archive/2007/06/01/1310.html</link><dc:creator>wofeiwo</dc:creator><author>wofeiwo</author><pubDate>Fri, 01 Jun 2007 14:48:00 GMT</pubDate><guid>http://www.phpweblog.net/GaRY/archive/2007/06/01/1310.html</guid><wfw:comment>http://www.phpweblog.net/GaRY/comments/1310.html</wfw:comment><comments>http://www.phpweblog.net/GaRY/archive/2007/06/01/1310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/GaRY/comments/commentRss/1310.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/GaRY/services/trackbacks/1310.html</trackback:ping><description><![CDATA[<p>文章来源：<a href="http://blogs.itecn.net/blogs/ahpeng">http://blogs.itecn.net/blogs/ahpeng</a></p>
<p>Label SID，盆盆将其翻译为标签SID，诸君别嫌土啊。这个东东是Windows Vista新引入的一个安全主体。在Mark Russinovich的博客文章《<a href="http://blogs.itecn.net/blogs/ahpeng/archive/2007/02/25/psexec.aspx">Windows Vista用户帐户控制、PsExec和安全边界</a>》中，我们知道在Windows Vista，进程和资源对象都划分等级的（完整性级别）。等级低的进程不够资格写入等级高的资源对象，哪怕访问控制列表（ACL）允许也不行。</p>
<p><font color=#0080ff><a href="http://blogs.itecn.net/blogs/ahpeng/"><strong>盆盆</strong></a><strong>评述</strong> 在拙作《<a href="http://blogs.itecn.net/blogs/winvista/archive/2006/07/23/IELowRights.aspx">Windows Vista IE保护模式深入剖析</a>》中做过一个形象的比喻。在Windows Vista中，安全机制有了很大的改进，不仅仅看ACL。这就好比男女双方求爱，除了看对方的经济收入等条件(相当于ACL)，还要看是否门当户对(相当于完整性级别)。</font></p>
<p>看了Mark Russinovich的文章，想必您已经知道如何查看和设置资源对象的完整性级别（可以用icacls或者AccessChk命令）。</p>
<p>那么进程呢？Mark的文章里没提到，相信您已经知道，就是所谓的标签SID，呵呵，太有才了:)</p>
<p><strong>标签SID的实质</strong></p>
<p>标签SID位于进程的访问令牌里，用来标识进程的完整性级别。进程要访问资源对象（例如某个文件夹）时，就亮出它的访问令牌。文件夹就会检查令牌里的标签SID，看看级别是否足够。如果级别比自己还低，对不起，您只能读取，不能写入。</p>
<p>可以用Process Explorer查看进程的访问令牌，从而查看某个进程的标签SID。附图就是一个进程的访问令牌。其中红色部分显示其标签SID是&#8220;Mandatory Label\Medium Mandatory Level&#8221;，表明该进程的完整性级别为&#8220;中级&#8221;。蓝色部分显示该进程并不拥有管理员的运行身份（Administrators标记为Deny），同时只有五个特权。<br><a href="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/1%5B1%5D.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=240 src="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/1.jpg" width=216 border=0></a> </p>
<p>完全可以想像，如果进程的完整性级别是高级（标签SID为Mandatory Label\High Mandatory Level），该进程应该拥有管理员的运行身份（Administrators标记为Owner），同时拥有约24个特权。</p>
<p><strong>和Linux的对比</strong></p>
<p>利用完整性级别这样的安全机制，Windows Vista就可以获得更高的安全。这样的机制类似于开源的MAC机制，例如Red Hat的SELinux。两者总体上各有千秋，但是窃以为比SELinux更加灵活，对用户的干扰也要小的多。在MAC下，用户有时候必须自己定义进程和资源的&#8220;类型&#8221;，否则进程工作可能会不正常。更具体的对比，可以参考盆盆回复在远景上的<a class="" href="http://www.vistafans.com/viewthread.php?tid=37624&amp;extra=page%3D&amp;page=16">帖子</a>（该贴已经有2万6千个访问量，寒一个～）</p>
<p><strong>标签SID的其他作用</strong></p>
<p>标签SID除了可以判断进程的访问权限外。还可以用来帮助决策UAC是否弹出权限提升对话框，这点在Mark的文章里没有提到。</p>
<p>默认情况下，如果某个进程需要管理员特权，则系统会查看其父进程的标签SID，如果是&#8220;中级&#8221;，则会弹出权限提升对话框。如果是&#8220;高级&#8221;，则不会弹出对话框（直接继承父进程的安全上下文）。</p>
<p><font color=#0080ff><a href="http://blogs.itecn.net/blogs/ahpeng/"><strong>盆盆</strong></a><strong>评述</strong></font> <font color=#0080ff>有关这一点，盆盆在06年3月份的文章《</font><a href="http://blogs.itecn.net/blogs/ahpeng/archive/2006/03/02/UAC_5F00_V2.aspx">Windows Vista的UAC功能浅析(二)</a><font color=#0080ff>》曾经做过这样的猜测，现在得到实验的证实。</font></p>
<p>由于绝大多数用户进程的父进程是Explorer，其标签SID为&#8220;中级&#8221;，所以会弹出权限提升对话框。</p>
<p>以管理员身份打开&#8220;命令提示符&#8221;窗口，然后再在其下运行需要管理员特权的进程，这时候不会弹出权限提升对话框。因为父进程cmd.exe的标签SID是&#8220;高级&#8221;。</p>
<p><strong>有趣的特例</strong></p>
<p>我们可以做一个实验，来欺骗Windows Vista的安全机制。在Process Explorer里单击File&#8594;Run as Limited User，然后在打开的对话框里输入&#8220;CMD&#8221;并回车，如附图所示。</p>
<p><a href="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/2%5B1%5D.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=190 src="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/2.jpg" width=240 border=0></a> </p>
<p>这时候会弹出一个很&#8220;另类&#8221;的命令提示符窗口。该命令提示符进程的标签SID是&#8220;高级&#8221;，但是实际上却是标准用户权限。不信？且看其访问令牌：</p>
<p><a href="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/3%5B1%5D.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=240 src="http://blogs.itecn.net/blogs/ahpeng/WindowsLiveWriter/WindowsVistaSID_E3FC/3.jpg" width=216 border=0></a> </p>
<p>在红色部分我们可以看到，其标签SID是&#8220;Mandatory Label\High Mandatory Level&#8221;（完整性级别为&#8220;高级&#8221;），但是却并不拥有管理员的运行身份（Administrators标记为Deny），同时只有五个特权（查看蓝色部分）。</p>
<p>在这个&#8220;另类&#8221;的命令提示符下运行某个需要管理员特权的任务，例如&#8220;服务&#8221;管理单元，会发生什么情况？</p>
<p>系统根本不会弹出提升权限对话框，直接启动&#8220;服务&#8221;管理单元。这是因为UAC系统会根据父进程的标签SID来判定是否需要弹出权限提升对话框。</p>
<p>但是打开的这个&#8220;服务&#8221;管理单元也一样&#8220;另类&#8221;，Windows显然已经认为这是一个管理员进程（因为其标签SID为高级），但是实际上只有标准用户权限，我们什么操作几乎都不能做。</p>
<p><strong>安全影响</strong></p>
<p>Windows Vista的UAC只根据父进程的标签SID来判断是否应该提升权限，看上去似乎有点弱智。但是实际上由于这种操作的可能性很低，所以影响很小。</p>
<p><strong>还有一个需要有趣的地方是，这种&#8220;另类&#8221;的进程虽然只有标准用户权限，但是完整性级别却是&#8220;高级&#8221;，所以这些进程可以通过代码注入等手段获取管理员权限，这和Windows 2000/XP的情况是一致的。</strong></p>
<p>不过攻击者想要利用这种方法绕开UAC的限制，几乎是不可能的，因为构建这样的访问令牌，本身需要管理员特权。所以用户大可不必担心。</p>
<p><font color=#0080ff><a href="http://blogs.itecn.net/blogs/ahpeng/"><strong>盆盆</strong></a><strong>评述</strong> 05年11月，当时盆盆刚接触Windows Vista不久，写过一篇文章《<a href="http://blogs.itecn.net/blogs/ahpeng/archive/2005/11/20/Uap_5F00_TimeDate.aspx">Windows Vista的UAC功能浅析(一)</a>》，就猜测&#8220;古怪帐户&#8221;的作用，应该是用来标识进程的等级。这里的&#8220;古怪帐户&#8221;，实际上就是本文所说的标签SID。</font></p>
<img src ="http://www.phpweblog.net/GaRY/aggbug/1310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/GaRY/" target="_blank">wofeiwo</a> 2007-06-01 22:48 <a href="http://www.phpweblog.net/GaRY/archive/2007/06/01/1310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>