PDA

View Full Version : حرفه ای: استفاده از Windows Filtering Platform



ferankyy
دوشنبه 11 دی 1391, 15:17 عصر
با سلام
میخواستم ببنیم آیا راهی وجود داره که بتونم از WFP داخل C# استفاده کنم ؟

plus
دوشنبه 11 دی 1391, 16:12 عصر
تا اونجا که من فهمیدم این WPF، یک سری API ارائه میده (http://msdn.microsoft.com/en-us/library/aa364931(v=vs.85).aspx).
کافیه Signature اون API ها رو برای #C بنویسید تا بتونید از توابعش در #C استفاده کنید.

ferankyy
دوشنبه 11 دی 1391, 19:43 عصر
ممنون از جواب شما . اگر امکانش هست در این باره بیشتر توضیح بدبد .

plus
دوشنبه 11 دی 1391, 20:24 عصر
این Library که شما میخوایین باهاش کار کنید یک سری توابع داره که توی MSDN لینکی که دادم در مورد هر کدوم و نحوه کارش توضیح داده، که این بخش موضوع کاری به #C نداره و شما با خوندن MSDN میتونید در مورد این توابع یاد بگیرید.
ولی توی MDSN این توابع با C++‎‎ Syntax نمایش داده شدن، شما باید معادل اونها رو در #C بنویسید تا بتونین اون توابع رو در #C فراخوانی کنید و از WFP استفاده کنید.
مثلا،


DWORD WINAPI IPsecDospGetStatistics0(
_In_ HANDLE engineHandle,
_Out_ IPSEC_DOSP_STATISTICS0 *idpStatistics
);

این یکی از توابع تعریف شده در Fwpuclnt.dll هست که مربوط به بخش IPSec هست. (http://msdn.microsoft.com/en-us/library/dd744981(v=vs.85).aspx)
ولی شما باید C#‎‎ Signature این تابع، Struct ها و ثابت های مروبطه رو داشته باشی تا بتونی توی #C ازش استفاده کنی.برای توابع Windows API که رایج هستن، این Signature توی سایت pinvoke.net هست ولی برای WFP نه.
مثلا برای Windows API MessageBox که ++C ش میشه:


int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);


معادل #C ش میشه :


[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options);

که با قرار دادن این کد در یک کلاس (و افزودن System.Runtime.InteropServices) میتونید در اون کلاس این تابع رو به صورت زیر فراخوانی کنید:


MessageBox(IntPtr.Zero, "Hello!", "Title", 0);


ولی برای توابع مورد نظر شما، باید دستی برای هر تابع و Struct ، معادل سازی کنید که کار دشواریه. شاید این نرم افزار که برای تبدیل Native Code به C#‎‎ Signature و VB Signature هست، بدردتون بخوره: http://clrinterop.codeplex.com/releases/view/14120
پ.ن:پیشنهاد میکنم اگه ++C بلدین، ارتباط با این API رو در ++C انجام بدین و به صورت یک DLL در بیارین و در #C ازون DLL استفاده کنید. به مراتب ساده تر از استفاده از این توابع در #C هست. مشکل Signature هم بوجود نمیاد.

ferankyy
سه شنبه 12 دی 1391, 20:16 عصر
فایل Fwpuclnt.dll رو از کجا میتونم گیر بیارم ، داخل گوگل هرچی جستجو کردم نبود !!!؟؟

plus
سه شنبه 12 دی 1391, 22:10 عصر
اینطور که توی MDSN نوشته، نیازمندی WFP در ویندوز کلاینت ویستا به بعد و یا ویندوز سرور 2008 به بعده.من توی ویندوز 8 ام این فایل رو موجود دارم (C:\windows\system32).بنابراین شما نیاز نیست چیزی رو دانلود کنید ولی اینطور که به نظر میاد فقط توی ویندوز ویستا به بعد میتونید کار کنید.البته من فقط یه نگاه مختصری کردم، میتونید رفرنس مایکروسافت رو خودتون نگاه کنید.



The Windows Filtering Platform is supported on clients running Windows Vista and later, and on servers running Windows Server 2008 and later. For information about the run-time requirements for a specific programming element, see the Requirements section of the reference page for that element.


http://msdn.microsoft.com/en-us/library/aa366510.aspx

ferankyy
سه شنبه 12 دی 1391, 23:12 عصر
توضیح شما کاملا درسته ، از این توابع فقط در ویندوز ویستا به بعد میشه استفاده کرد .
خوب روش دسترسی به این فایل dll مثل دسترسی به توابع API هست دیگه درسته ؟ یعنی برای اینکه بتونم از dll استفاده کنم ، ابتدا باید با این دستور اون رو فراخونی کنم :
[DllImport(" Fwpuclnt.dll", CharSet=CharSet.Auto)]

و بعدش باید signature مربوط به اعضا و توابع اون رو دستی بنوسم ، درسته ؟

plus
سه شنبه 12 دی 1391, 23:40 عصر
بله درسته، ولی موضوع این هست که من یه بررسی کوچیک کردم، به نظر میومد Signature معادل نوشتن برای توابع و Structure هاش دردسر زیادی داره (در صورتی که با خیلی از توابعش بخواین کار کنید)، البته pinvke toolkit که لینکش رو دادم میتونه تا حدی کمک کنه ولی به نظرم پر دردسر هست، و بهتره یک واسط با ++C برای کارهاییی که میخواین بکنید بنویسید تا ++C واسط بین #C و WFP API بشه.

ferankyy
چهارشنبه 13 دی 1391, 10:34 صبح
بهتره یک واسط با ++C برای کارهاییی که میخواین بکنید بنویسید تا ++C واسط بین #C و WPF API بشه.
نمیدونم درست متوجه شدم یا نه . ولی فکر کنم منظور شما این هست که من باید با C++ یه تابع بنویسم که برای فیلتر کردن وب سایت ها هست و داخل اون تابع از wfp استفاده کنم و در نهایت از اون dll و همون تابعی که داخلش هست در سی شارپ استفاده کنم . درسته ؟

plus
جمعه 29 دی 1391, 03:18 صبح
نمیدونم درست متوجه شدم یا نه . ولی فکر کنم منظور شما این هست که من باید با C++ یه تابع بنویسم که برای فیلتر کردن وب سایت ها هست و داخل اون تابع از wfp استفاده کنم و در نهایت از اون dll و همون تابعی که داخلش هست در سی شارپ استفاده کنم . درسته ؟
من پست شما رو اون موقع ندیدم که پاسخ بدم...بله منظور من دقیقا همینه.این روش خیلی ساده تر از استفاده مستقیم با #C هست...

ashkan1234
جمعه 29 دی 1391, 12:16 عصر
با سلام!
دوستان آیا میشه با Wpf یک کنترل(مثلا دکمه) طراحی کرد بعد از اون کنترل در سی شارپ استفاده کرد؟!(از Wpf چیز زیادی نمیدونم)

ferankyy
یک شنبه 01 بهمن 1391, 14:08 عصر
با سلام!
دوستان آیا میشه با Wpf یک کنترل(مثلا دکمه) طراحی کرد بعد از اون کنترل در سی شارپ استفاده کرد؟!(از Wpf چیز زیادی نمیدونم)

دوست عزیز بحث ما WFP هست نه WPF

ashkan1234
یک شنبه 01 بهمن 1391, 14:56 عصر
دوست عزیز بحث ما WFP هست نه WPF

بله ،ممنون!ولی تو پست 4 و 6 و 8 از wpf نام برده شده بود!(احتمالا ایشون حواسشون نبوده)ولی حق با شماست اشتباه از بنده بود به عنوان تاپیک دقت نکردم!
ممنون!(ولی با این حال اگه کسی در ضمینه سوالم کمکی میتونست کنه ممنون میشم)