[تمرين] الكل يسأل و الكل يجيب
#41
هل جربت تشغيل الدرايفر ؟ : نعم !!!! .
هل قام بالعمل الذي برمج له ؟ : نعم !!!! .

انا جربت الدرايفر و ساخبرك بالنتيجة بعد ان تجيب :نعم مشكل في تسمية الـ driver.pas :thumbs:.

بارك الله فيك ,,


الملفات المرفقة
.rar   DriverTest_ZwCreateFile.rar (الحجم : 2.49 ك ب / التحميلات : 34)
الرد
#42
إقتباس :انا جربت الدرايفر و ساخبرك بالنتيجة بعد ان تجيب :نعم مشكل في تسمية الـ driver.pas
نعم الدرايفر يعمل بنجاح.. و عندك خطأ في تسمية وحدة الدرايفر.

ارأيت ان برمجة الدرايفرات حساسة جدا جدا، و اي خطأ بسيط يقودك مباشرة الى bsod.

بالتوفيق ان شاء الله
الرد
#43
السلام عليكم

سؤالي ليس برمجي وهو لمادا هده الضجة حول تقنية الدوت نت ولازالت أغلب البرامج المبرمجة والحديثة تبرمج ب

دلفي و سي بلس بلس

أعلم أن أحد الأسرار هو السهولة الكبيرة لكني أرى أن هده التقنية ضلت حبيسة البرامج الموجهة للشركات أي

أنها ليست للمشاريع الضخمة جدا التي نراها مثلا winrar مبرمج ب C++Builder ولا داعي لدكر برامج الدلفي
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#44
me&delphi' كتب :السلام عليكم

سؤالي ليس برمجي وهو لمادا هده الضجة حول تقنية الدوت نت ولازالت أغلب البرامج المبرمجة والحديثة تبرمج ب

دلفي و سي بلس بلس

أعلم أن أحد الأسرار هو السهولة الكبيرة لكني أرى أن هده التقنية ضلت حبيسة البرامج الموجهة للشركات أي

أنها ليست للمشاريع الضخمة جدا التي نراها مثلا winrar مبرمج ب C++Builder ولا داعي لدكر برامج الدلفي

في البداية السلام عليكم


الأسباب تعود لكون شركة Microsoft ماديا قوية جدا
مما جعلها تكون سوق كبيرة محيطة بها أو تتعامل معها
الطرق كثيرة التي اعتمدها فهي لا تنتظر المبرمجين بل تقصدهم الى ديارهم
و تعطيهم أجور تسيل اللعاب حتى يتواجدون معها (الأمثلة كثيرة)
و الشهائد التي تضعها في كل الدول تقريبا في شكل مناظرات تساعدها كثيرا

من ناحية البرمجيات لم تدخل شركة Microsoft كثيرا هذه السوق
و لكل ميدان لغة البرمجة المناسبة له, لذلك المقارنة تبقى دائما رهن الميدان

المنافسة الان بدأت تكبر و تشتد
لعلمك الان أصبحت الحواسيب غير مدعمة بأحد أنظمة التشغيل الخاصة ب Microsoft
لكل من شركة Hp أو Dell
و أصبحت تدرج مع حواسيبها اما نسخة من Ubuntu
أو تترك Free Dos فقط

شركة Google منافسة لها و Embarcadero أيضا و القادم مازال يخفي الكثير

يبقى لكل شخص ميولاته الخاصة و لغة البرمجة المفضلة
الموضوع يمكن أن يقال فيه الكثير

و السلام.
الرد
#45
أوافقك الرأي أخي الكريم أما من ناحية الميولات و اللغة المفضلة فهدا شيء معروف فكما تلاحظ فجيل مبرمجي

الدوت نت نادرا مايتعاملون مع المؤشرات بالاظافة الى غياب الأسمبلي في لغتهم و العديد من مكامن القوة أما

السهولة فهدا الشيء الدي لمسته فيها وهكدا سيضلون تابعين لميكروسفت في كل صغيرة و كبيرة

لاأقول أنها سيئة بل لا يجب على المبرمج ان يعتمد عليها كليا فلا بد من أسمبلي و سي بلس بلس
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#46
في البداية السلام عليكم


لاطلاع أكثر, تم تناول الحديث في خصوص هذه الموضوع
بهذه المشاركة لدى الفريق العربي للهندسة العكسية

حوار : دلفي أم فيجوال دوت نت؟

و السلام.
الرد
#47
السلام عليكم

هدا سورس كود لعمل 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

الرد
#48
الدالة CreateService تتيح لنا بإختيار مود التحميل في البارامتر dwStartType

كما يلي :

SERVICE_AUTO_START : يتم تحميل السيرفيس أليا وقت تشغيل النظام .

SERVICE_BOOT_START : يتم تحميل السيرفيس بلودر النظام مود boot

SERVICE_DEMAND_START : يحمل مباشرة فور إستدعاء الدالة StartService

IoInitSystem ## : SERVICE_SYSTEM_START

SERVICE_DISABLED : إبطال السيرفيس محاولا تشغيله في مود الخطأ و ذلك بإرجاع
ERROR_SERVICE_DISABLED

و عليه سنتمكن من عمل Loader بسيط مع التحكم في كيفية أو مود التحميل ...

PHP كود :
procedure CallDriver(sysName: string;LoadMode:Byte);
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,
      
LoadMode,
      
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; 

حيث loadMode :

PHP كود :
// Start Type
//
  
{$EXTERNALSYM SERVICE_BOOT_START}
  
SERVICE_BOOT_START            = $00000000;
  {
$EXTERNALSYM SERVICE_SYSTEM_START}
  
SERVICE_SYSTEM_START          = $00000001;
  {
$EXTERNALSYM SERVICE_AUTO_START}
  
SERVICE_AUTO_START            = $00000002;
  {
$EXTERNALSYM SERVICE_DEMAND_START}
  
SERVICE_DEMAND_START          = $00000003;
  {
$EXTERNALSYM SERVICE_DISABLED}
  
SERVICE_DISABLED              = $00000004; 

****ا المشاركة و طرح الأفكار و التوضيحات بارك الله فيكم ,,
I'M Fly Like A G6

الرد
#49
السلام عليكم

كيف يمكن إنشاء درايفرات sys. إنطلاقا من دلفي ؟ (يعني الخطوات المبسطة من ترجمة وربط ..ما الملفات التي نربطها وبماذا؟)
ومن يتهيب صعود الجبال يعش أبد الدهر بين التلال و الحفر
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم