۲۶-آذر-۱۳۹۳, ۱۸:۲۱:۱۴
۲۶-آذر-۱۳۹۳, ۱۸:۲۵:۲۳
برای PC ؟ چه سیستم عاملی؟
۲۶-آذر-۱۳۹۳, ۱۸:۳۲:۰۷
برای ویندوز 7 می خوام
۲۶-آذر-۱۳۹۳, ۱۸:۴۶:۰۰
شما sdk ویندوز که شامل - Windows Driver Kit - WDKهست رو برای نسخه ی ویندوز 7 رو دانلود کنید، وبرای یک محیط IDE برای یکپارچه سازی و کمپایل از ویژوال استدیو استفاده کنید،بدون اون هم میتونید ولی بهتره که نصب کنید.
۲۶-آذر-۱۳۹۳, ۱۸:۵۲:۳۵
من WDK رو برای ویندوز 7 و همینطور برای ویندوز 8 دانلود کردم.
خودم هم با ویژوال استادیو کار میکنم با زبانهای c++ و c#.
من فقط نمیدونم کد نویسیمو از کجا شروع کنم و چطوری بنیویسم.
خودم هم با ویژوال استادیو کار میکنم با زبانهای c++ و c#.
من فقط نمیدونم کد نویسیمو از کجا شروع کنم و چطوری بنیویسم.
۲۶-آذر-۱۳۹۳, ۱۹:۱۷:۲۸
اول شما باید مدل درایور رو مشخص کنید
نمونه درایور ها درون پوشه ی محل نصب wdk هست
ولی من برای درایور نویسی از این روش استفاده میکنم:
1-استفاده از ماشین مجازی مجازی
2-استفاده از OSRLoader برای لود و تست درایور
3-استفاده از DbgView
4-استفاده ازNotepad برای کد نویسی (اگه از ویژوال استدیو استفاده میکنید این لازم نیست)
نمونه ی Hello World
1-یک فایل با این نام و پسوند بسازید makefile.def
2-فایل مذکور رو باز کنید و کد زیر رو اضافه کنید:
3-یک فایل بدون پسوند به نام sources بسازید و کد زیر را درون آن قرار دهید
4-یک فایل با نام hello.c بسازید و کد زیر را درون آن قرار دهید:
5-برای ساخت درایور مورد نظر از طریق cmd وارد مسیر نصب WDk شوید برای مثال :
6 -همه ی فایل هایی رو که ساختید رو درون یک پوشه به نام Hello بریزید و با دستور build درایور رو بسازید
7-مثال:
8-وقتی که درایور ساخته شد (hello.cat,hello.inf,hello.sys) برای ساین و اجرا از OSRLoader استفاده کنید و با DBGWIVE پیام "سلام دنیا"رو برای لود و آن لود رو ببینید
با استفاده از سیمبل های تولید شده میتونید درایورتون رو دیباگ کنید
نمونه درایور ها درون پوشه ی محل نصب wdk هست
ولی من برای درایور نویسی از این روش استفاده میکنم:
1-استفاده از ماشین مجازی مجازی
2-استفاده از OSRLoader برای لود و تست درایور
3-استفاده از DbgView
4-استفاده ازNotepad برای کد نویسی (اگه از ویژوال استدیو استفاده میکنید این لازم نیست)
نمونه ی Hello World
1-یک فایل با این نام و پسوند بسازید makefile.def
2-فایل مذکور رو باز کنید و کد زیر رو اضافه کنید:
کد php:
!INCLUDE $(NTMAKEENV)\makefile.def
3-یک فایل بدون پسوند به نام sources بسازید و کد زیر را درون آن قرار دهید
کد php:
TARGETNAME = hello
TARGETPATH = obj
TARGETTYPE = DRIVER
INCLUDES = %BUILD%\inc
LIBS = %BUILD%\lib
SOURCES = hello.c
4-یک فایل با نام hello.c بسازید و کد زیر را درون آن قرار دهید:
کد php:
#include <ntddk.h>
VOID Unload(IN PDRIVER_OBJECT pDriverObject)
{
DbgPrint("Driver Unloaded.\n");
return;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING regPath)
{
DbgPrint("Hello World!.\n");
pDriverObject->DriverUnload = Unload;
return STATUS_SUCCESS;
}
5-برای ساخت درایور مورد نظر از طریق cmd وارد مسیر نصب WDk شوید برای مثال :
کد php:
CD C:\WinDDK\7600.16385.1>
7-مثال:
کد php:
C:\WinDDK\7600.16385.1\src\Drivers\hello> build
با استفاده از سیمبل های تولید شده میتونید درایورتون رو دیباگ کنید
۲۶-آذر-۱۳۹۳, ۱۹:۲۴:۳۸
http://www.iranled.com/forum/thread-24707.html
تاپیک بالا یکمی روش بحث شده
نتیجه گیری خودم. از اوضاع:
نوشتن داریور ، نباید قسمتی از پروژه باشه، بلکه خودش باید هدف جداباشه که باید دنبال بشه
اگه زمان کافی برای صرف کردن ندارین، بهتره سمت سخت افزار از آیسی هایی استفاده کنید که برای ارتباط با pc, درایور با مستندات و sdk, و... داشته باشه
(از اینجا به بعد ممکنه اطلاعاتی که میدم، اشتباه باشن)
درایور ها ۲ نوع بودن، یکی user mode, و دیگری kernel mode
یوزر مد، برای برنامه نویسیش میشد از یه سری کتاب خونه سطح بالاتر استفاده کرد که کار رو ساده تر میکرد، به شرطی که سخت افزار شما در دسته بندی های آماده ، جایگاهی داشت!
یعنی مثلا وبکم باشه، که یه کلاس آماده براش موجوده
تعامل با api ها در سمت user mode ، کمتر بودش نسبت به kernel mode
اگه قبلا با دات نت کد میزدید، به آشنایی با ساختار و کلیات api نیاز دارید
همونطورم که اشاره شد، visual studio فکر کنم از ورژن ۱۱ به بعد، skd دایور هارو پشتیبانی میکنه و لازم نیست یه ide دیگه کار کنید.
همینا بودن...
موفق باشین
تاپیک بالا یکمی روش بحث شده
نتیجه گیری خودم. از اوضاع:
نوشتن داریور ، نباید قسمتی از پروژه باشه، بلکه خودش باید هدف جداباشه که باید دنبال بشه
اگه زمان کافی برای صرف کردن ندارین، بهتره سمت سخت افزار از آیسی هایی استفاده کنید که برای ارتباط با pc, درایور با مستندات و sdk, و... داشته باشه
(از اینجا به بعد ممکنه اطلاعاتی که میدم، اشتباه باشن)
درایور ها ۲ نوع بودن، یکی user mode, و دیگری kernel mode
یوزر مد، برای برنامه نویسیش میشد از یه سری کتاب خونه سطح بالاتر استفاده کرد که کار رو ساده تر میکرد، به شرطی که سخت افزار شما در دسته بندی های آماده ، جایگاهی داشت!
یعنی مثلا وبکم باشه، که یه کلاس آماده براش موجوده
تعامل با api ها در سمت user mode ، کمتر بودش نسبت به kernel mode
اگه قبلا با دات نت کد میزدید، به آشنایی با ساختار و کلیات api نیاز دارید
همونطورم که اشاره شد، visual studio فکر کنم از ورژن ۱۱ به بعد، skd دایور هارو پشتیبانی میکنه و لازم نیست یه ide دیگه کار کنید.
همینا بودن...
موفق باشین
۲۶-آذر-۱۳۹۳, ۱۹:۳۲:۱۷
خیلی ممنون از راهنمایی خییییلی عالی تون
ولی اگر مثلاً ما سخت افزاری داشته باشیم که بخواییم ازش اطلاعاتی بگیریم یا اطلاعاتی بدیم چطور میشه.
این کار هم مثل ،مثال بالا میشه؟
ولی اگر مثلاً ما سخت افزاری داشته باشیم که بخواییم ازش اطلاعاتی بگیریم یا اطلاعاتی بدیم چطور میشه.
این کار هم مثل ،مثال بالا میشه؟
۲۶-آذر-۱۳۹۳, ۲۰:۱۰:۵۴
نه!!
این یک مثال فقط نمایش یک رشته به همراه بارگذاری یک نمونه درایور بود
برای ساخت درایور باید به این نکته توجه کرد که این درایور برای چه هدفی است!برای چه سیستم عاملی!و از چه پروتکلی استفاده میکنه. اساسا میخواییم در سطح کاربر درایور بنویسیم یافقطدر سطح کرنل؟ یا هردو؟ یعنی فقط یک درایور راه انداز باشه یا کاربر هم بتونه با هاش تبادل اطلاعات کنه؟
شما همه ی مثال هایی رو که لازم دارید در پوشه ی src در محل نصب wdk رو یکجا دارید!فقط کافی ست دستور build رو اجرا کنید تا درایور مربوطه کمپایل بشه.ودر قسمت user mode شما وقتی که پروژه رو کمپایل کنید یک exe.tester خواهید داشت که درایور رو کنترل میکنه و باهاش ارتباط برقرار میکنه (اطلاعات میفرسته یا میگیره)
به هرحال
یک آموزش ساخت درایور درست میکنم همچنین نحوه ی برقراری ارتباط از سطح کاربر به سطح کرنل
این یک مثال فقط نمایش یک رشته به همراه بارگذاری یک نمونه درایور بود
برای ساخت درایور باید به این نکته توجه کرد که این درایور برای چه هدفی است!برای چه سیستم عاملی!و از چه پروتکلی استفاده میکنه. اساسا میخواییم در سطح کاربر درایور بنویسیم یافقطدر سطح کرنل؟ یا هردو؟ یعنی فقط یک درایور راه انداز باشه یا کاربر هم بتونه با هاش تبادل اطلاعات کنه؟
شما همه ی مثال هایی رو که لازم دارید در پوشه ی src در محل نصب wdk رو یکجا دارید!فقط کافی ست دستور build رو اجرا کنید تا درایور مربوطه کمپایل بشه.ودر قسمت user mode شما وقتی که پروژه رو کمپایل کنید یک exe.tester خواهید داشت که درایور رو کنترل میکنه و باهاش ارتباط برقرار میکنه (اطلاعات میفرسته یا میگیره)
به هرحال
یک آموزش ساخت درایور درست میکنم همچنین نحوه ی برقراری ارتباط از سطح کاربر به سطح کرنل
۲۶-آذر-۱۳۹۳, ۲۳:۳۸:۴۱
(۲۶-آذر-۱۳۹۳, ۱۹:۲۴:۳۸)salehjg نوشته است: [ -> ]http://www.iranled.com/forum/thread-24707.html
تاپیک بالا یکمی روش بحث شده
نتیجه گیری خودم. از اوضاع:
نوشتن داریور ، نباید قسمتی از پروژه باشه، بلکه خودش باید هدف جداباشه که باید دنبال بشه
اگه زمان کافی برای صرف کردن ندارین، بهتره سمت سخت افزار از آیسی هایی استفاده کنید که برای ارتباط با pc, درایور با مستندات و sdk, و... داشته باشه
(از اینجا به بعد ممکنه اطلاعاتی که میدم، اشتباه باشن)
درایور ها ۲ نوع بودن، یکی user mode, و دیگری kernel mode
یوزر مد، برای برنامه نویسیش میشد از یه سری کتاب خونه سطح بالاتر استفاده کرد که کار رو ساده تر میکرد، به شرطی که سخت افزار شما در دسته بندی های آماده ، جایگاهی داشت!
یعنی مثلا وبکم باشه، که یه کلاس آماده براش موجوده
تعامل با api ها در سمت user mode ، کمتر بودش نسبت به kernel mode
اگه قبلا با دات نت کد میزدید، به آشنایی با ساختار و کلیات api نیاز دارید
همونطورم که اشاره شد، visual studio فکر کنم از ورژن ۱۱ به بعد، skd دایور هارو پشتیبانی میکنه و لازم نیست یه ide دیگه کار کنید.
همینا بودن...
موفق باشین
اساس کار همینه :)
کسایی که دیوایس درایور مینویسن معمولا کتابخانه رو هم خودشون مینویسن یا به قیمت بالایی میخرن(برای کارهای حرفه ای)معمولا زیاد از api های عمومی ویندوز استفاده نمیکنن،وهرتکنولوژی sdk خودشو داره.
۱۳-دى-۱۳۹۳, ۱۷:۰۹:۰۵
دوست عزیز از راهنمایی بسیار مفیدتون خیلی ممنون
ببخشید خیلی دیر جواب دادم اینترنتم تموم شده بود
از راهنمایی تون استفاده می کنم
در مورد API ها هم اطلاعاتی دارم چون قبلاً با VB6.0 کار میکردم و از API هاش استفاده می کردم
خیلی ممنون از راهنماییت
ببخشید خیلی دیر جواب دادم اینترنتم تموم شده بود
از راهنمایی تون استفاده می کنم
در مورد API ها هم اطلاعاتی دارم چون قبلاً با VB6.0 کار میکردم و از API هاش استفاده می کردم
خیلی ممنون از راهنماییت