<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lagon &#187; LoadDriver</title>
	<atom:link href="http://lagon.eu5.org/tag/loaddriver/feed" rel="self" type="application/rss+xml" />
	<link>http://lagon.eu5.org</link>
	<description>Window Kernel &#38; Web InfoSec</description>
	<lastBuildDate>Sun, 12 Apr 2015 13:56:55 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<item>
		<title>Install a NT Driver</title>
		<link>http://lagon.eu5.org/windows-kernel/id=68</link>
		<comments>http://lagon.eu5.org/windows-kernel/id=68#comments</comments>
		<pubDate>Thu, 24 Apr 2014 05:20:38 +0000</pubDate>
		<dc:creator><![CDATA[Lagon]]></dc:creator>
				<category><![CDATA[Windows Kernel]]></category>
		<category><![CDATA[LoadDriver]]></category>

		<guid isPermaLink="false">http://lagon.eu5.org/?p=68</guid>
		<description><![CDATA[#include &#8220;windows.h&#8221; #include &#8220;stdio.h&#8221; #include &#8220;stdlib.h&#8221; BOOL LoadDriver(SC_HANDLE schSCManager, //SCM Handle LPCSTR lpszDriverName, //Driver Name LPCSTR lpszServiceFullPath); //full-qualifie<a class="read-more" href="http://lagon.eu5.org/windows-kernel/id=68">[ 更多... ]</a>]]></description>
				<content:encoded><![CDATA[<p>#include &#8220;windows.h&#8221;<br />
#include &#8220;stdio.h&#8221;<br />
#include &#8220;stdlib.h&#8221;<br />
BOOL LoadDriver(SC_HANDLE schSCManager, //SCM Handle<br />
LPCSTR lpszDriverName, //Driver Name<br />
LPCSTR lpszServiceFullPath); //full-qualified path<br />
BOOL RemoveDriver(SC_HANDLE schSCManager, //SCM handle<br />
LPCTSTR lpszDriverName); //Driver Name<br />
BOOL StartDriver(SC_HANDLE schSCManager,<br />
LPCTSTR lpszDriverName);<br />
BOOL StopService(SC_HANDLE schSCManager,<br />
LPCTSTR lpszDriverName);</p>
<p>int main()<br />
{<br />
char szFilePath[MAX_PATH];<br />
char* pszFileName;<br />
OPENFILENAMEA stOpenFileName;<br />
BOOL zRet;<br />
SC_HANDLE schSCManager;<br />
//<br />
RtlZeroMemory(&amp;stOpenFileName ,sizeof(OPENFILENAME));<br />
RtlZeroMemory(szFilePath ,sizeof(char)*MAX_PATH);<br />
stOpenFileName.lStructSize = sizeof(OPENFILENAME);;<br />
stOpenFileName.lpstrFilter = &#8220;驱动(*.sys)\0\0&#8243;;<br />
stOpenFileName.lpstrFile = szFilePath;<br />
stOpenFileName.nMaxFile = MAX_PATH;<br />
stOpenFileName.Flags = OFN_FILEMUSTEXIST;<br />
zRet = GetOpenFileName(&amp;stOpenFileName);<br />
MessageBox(NULL, stOpenFileName.lpstrFile, stOpenFileName.lpstrFile+stOpenFileName.nFileOffset, 0);<br />
//<br />
pszFileName = stOpenFileName.lpstrFile + stOpenFileName.nFileOffset;<br />
//<br />
schSCManager = OpenSCManager(NULL,//Machine Name<br />
NULL,//local database<br />
SC_MANAGER_ALL_ACCESS);<br />
//<br />
if ( !schSCManager )<br />
{<br />
printf(&#8220;Open SCM Failed ERROR:%X\n&#8221;,GetLastError());<br />
system(&#8220;pause&#8221;);<br />
return -1;<br />
}</p>
<p>//TODO: check the path<br />
if ( LoadDriver(schSCManager, pszFileName, &amp;szFilePath) )<br />
{<br />
printf(&#8220;Load Success!\n&#8221;);<br />
}</p>
<p>system(&#8220;pause&#8221;);</p>
<p>if ( StartDriver(schSCManager, pszFileName) )<br />
{<br />
printf(&#8220;Start Success!\n&#8221;);<br />
}</p>
<p>system(&#8220;pause&#8221;);<br />
if ( StopService(schSCManager, pszFileName) )<br />
{<br />
printf(&#8220;Stop Success!\n&#8221;);<br />
}</p>
<p>system(&#8220;pause&#8221;);<br />
if ( RemoveDriver(schSCManager, pszFileName) )<br />
{<br />
printf(&#8220;Remove Success!\n&#8221;);<br />
}</p>
<p>system(&#8220;pause&#8221;);</p>
<p>CloseServiceHandle(schSCManager);</p>
<p>return 0;<br />
}</p>
<p>BOOL LoadDriver(SC_HANDLE schSCManager , //SCM Handle<br />
LPCSTR lpszDriverName , //Driver Name<br />
LPCSTR lpszServiceFullPath) //full-qualified path<br />
{<br />
SC_HANDLE schService = NULL;<br />
DWORD dwErrorRet;</p>
<p>schService = CreateService(schSCManager ,<br />
lpszDriverName , //Service name<br />
lpszDriverName , //Service to display<br />
SERVICE_ALL_ACCESS , //desired access<br />
SERVICE_KERNEL_DRIVER , //service type<br />
SERVICE_DEMAND_START , //start type<br />
SERVICE_ERROR_IGNORE , //error control type<br />
lpszServiceFullPath , //full-qualified path<br />
NULL ,NULL ,NULL ,NULL ,NULL<br />
);</p>
<p>if (!schService)<br />
{<br />
dwErrorRet = GetLastError();<br />
if (dwErrorRet == ERROR_SERVICE_EXISTS)<br />
{<br />
printf(&#8220;Service Existed!\n&#8221;);<br />
return TRUE;<br />
}<br />
else<br />
{<br />
printf(&#8220;CreateService failed ! Error:%X\n&#8221; ,dwErrorRet);<br />
return FALSE;<br />
}<br />
}</p>
<p>//Create Successfully<br />
//Close the service<br />
printf(&#8220;Create Service Successful!&#8221;);<br />
if (schService)<br />
CloseServiceHandle(schService);<br />
return TRUE;</p>
<p>}</p>
<p>//remove service<br />
BOOL RemoveDriver(SC_HANDLE schSCManager ,//SCM handle<br />
LPCTSTR lpszDriverName)//Driver Name<br />
{<br />
SC_HANDLE schService;<br />
BOOL zRet;<br />
//Open an Existing Service<br />
schService = OpenService(schSCManager ,<br />
lpszDriverName ,<br />
SERVICE_ALL_ACCESS);</p>
<p>if (!schService)<br />
{<br />
printf(&#8220;Open Service Failed! ERROR:%X\n&#8221; ,GetLastError());<br />
return FALSE;</p>
<p>}<br />
//Delete Service<br />
if (DeleteService(schService))<br />
{<br />
zRet = TRUE;<br />
}<br />
else<br />
{<br />
printf(&#8220;DeleteService Failed! ERROR:%X\n&#8221; ,GetLastError());<br />
zRet = FALSE;<br />
}<br />
if (schService)<br />
{<br />
//printf(&#8220;DeleteService Successful!\n&#8221;);<br />
CloseServiceHandle(schService);<br />
}<br />
return zRet;</p>
<p>}</p>
<p>//start service<br />
BOOL StartDriver(SC_HANDLE schSCManager ,<br />
LPCTSTR lpszDriverName)<br />
{<br />
SC_HANDLE schService;<br />
DWORD dwErrorRet;</p>
<p>//Open Service<br />
schService = OpenService(schSCManager ,<br />
lpszDriverName ,<br />
SERVICE_ALL_ACCESS);</p>
<p>if (!schService)<br />
{<br />
printf(&#8220;Open Service Failed! ERROR:%X\n&#8221; ,GetLastError());<br />
return FALSE;</p>
<p>}<br />
if (!StartService(schService ,0 ,NULL))<br />
{<br />
//failed<br />
dwErrorRet = GetLastError();<br />
if (dwErrorRet == ERROR_SERVICE_ALREADY_RUNNING) //service has been running<br />
return TRUE;<br />
else<br />
{<br />
printf(&#8220;StartSerivce Failed!ERROR:%X\n&#8221; ,dwErrorRet);<br />
return FALSE;<br />
}<br />
}<br />
if (schService)<br />
CloseServiceHandle(schService);<br />
return TRUE;</p>
<p>}</p>
<p>//stop service<br />
BOOL StopService(SC_HANDLE schSCManager ,<br />
LPCTSTR lpszDriverName)<br />
{<br />
SC_HANDLE schService;<br />
SERVICE_STATUS stServiceStatus;<br />
BOOL zRet;<br />
//Open Service<br />
schService = OpenService(schSCManager ,<br />
lpszDriverName ,<br />
SERVICE_ALL_ACCESS);</p>
<p>if (!schService)<br />
{<br />
printf(&#8220;Open Service Failed! ERROR:%X\n&#8221; ,GetLastError());<br />
return FALSE;</p>
<p>}</p>
<p>if (ControlService(schService ,<br />
SERVICE_CONTROL_STOP ,<br />
&amp;stServiceStatus))<br />
{<br />
zRet = TRUE;<br />
}<br />
else<br />
{<br />
//Failed<br />
printf(&#8220;StopService Failed ! ERROR:%X\n&#8221; ,GetLastError());<br />
zRet = FALSE;<br />
}<br />
if (schService)<br />
CloseServiceHandle(schService);</p>
<p>return zRet;<br />
}</p>
<p><strong><span style="font-size: 24px; color: #ff0000;">需要使用管理员权限运行</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://lagon.eu5.org/windows-kernel/id=68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
