23-12-2009, 03:45 PM
السلام عليكم
هدا سورس كود لعمل Load & Unload لـ دريفر من اليوزر مود :
أصل الكود بلغة c/c++ :
الأن ممكن رسم توضيحي لهندسة الكيرنل المعتمدة من طرف الـ wIndows :
http://technet.microsoft.com/en-us/libra...et.10).gif
كما نلاحظ الطريقة المعتمدة لا نحتاج فيها إلى تسجيل الدريفر في الريجيسترى بل
مباشرة و بكل سهولة .
هدا سورس كود لعمل Load & Unload لـ دريفر من اليوزر مود :
PHP كود :
{$OPTIMIZATION ON}
{$WARNINGS OFF}
{$HINTS OFF}
uses
Winsvc;
procedure CallDriver(sysName: string);
var
hSCManager, hService, hDevice: Hwnd;
dwBytesReturned: DWORD;
lpTemp: PChar;
begin
hSCManager := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);
if hSCManager <> 0 then
begin
hService := CreateService(hSCManager, 'Sample',
'For Practise !!!',
SERVICE_START or SERVICE_STOP or _DELETE,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
PChar(sysName),
nil, nil, nil, nil, nil);
if hService <> 0 then
begin
StartService(hService, 0, lpTemp);
DeleteService(hService);
CloseServiceHandle(hService);
end else
begin
ShowMessage('Can''t Create Service .');
end;
CloseServiceHandle(hSCManager);
end else
begin
ShowMessage('Can''t connect to Service Control Manager Data Base .');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with OpenD do
begin
Execute;
if FileName = '' then Exit;
CallDriver(FileName);
end;
end;
أصل الكود بلغة c/c++ :
PHP كود :
int _cdecl main(void)
{
HANDLE hSCManager;
HANDLE hService;
SERVICE_STATUS ss;
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
printf("Load Driver\n");
if(hSCManager)
{
printf("Create Service\n");
hService = CreateService(hSCManager, "Example",
"Example Driver",
SERVICE_START | DELETE | SERVICE_STOP,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"C:\\example.sys",
NULL, NULL, NULL, NULL, NULL);
if(!hService)
{
hService = OpenService(hSCManager, "Example",
SERVICE_START | DELETE | SERVICE_STOP);
}
if(hService)
{
printf("Start Service\n");
StartService(hService, 0, NULL);
printf("Press Enter to close service\r\n");
getchar();
ControlService(hService, SERVICE_CONTROL_STOP, &ss);
DeleteService(hService);
CloseServiceHandle(hService);
}
CloseServiceHandle(hSCManager);
}
return 0;
}
الأن ممكن رسم توضيحي لهندسة الكيرنل المعتمدة من طرف الـ wIndows :
http://technet.microsoft.com/en-us/libra...et.10).gif
كما نلاحظ الطريقة المعتمدة لا نحتاج فيها إلى تسجيل الدريفر في الريجيسترى بل
مباشرة و بكل سهولة .
I'M Fly Like A G6

