f.falahati
دوشنبه 23 آذر 1394, 10:59 صبح
سلام به همه.
من دارم روی درایور tap tun کار میکنم،برای همین یک کدی رو از github دانلود کردم، یک قسمت از کد هست که متوجه نمیشم. توی این کد با استفاده از registry key ها میتونم آداپتر tap رو پیدا میکنه، بعد با crateFile یک handle براش ایجاد میکنه، بعد از اون با DeviceIoControl تنظیماتی رو روی اون انجام میده که مشکل من دقیقا همینجاست. من نمیتونم مفهوم درست DeviceIoControl رو درک کنم و همینطور کدهای CTL_CODE رو !یک قسمت از کد اینه:
#define TAP_CONTROL_CODE( request, method ) ( \
CTL_CODE( (FILE_DEVICE_UNKNOWN), (request), (method), 0) \
)
//*****************
if (DeviceIoControl (handle, TAP_CONTROL_CODE(3, 0),//TAP_WIN_IOCTL_GET_MTU,
&mtu, sizeof (mtu),
&mtu, sizeof (mtu), &len, NULL))
printf ("TAP-Windows MTU=%d\n", (int) mtu);
من حالا میخوام بدونم این عدد 3 در قسمت TAP_CONTROL_CODE(3, 0) کاربردش چیه؟ این اعداد یا بهتر بگم این کدها رو از کجا میشه پیدا کرد؟راسیتش نمیدونم چی باید سرچ کنم!!!
البته یک کد دیگه هم دانلود کردم که این موارد رو داشت:
#define TAP_CONTROL_CODE(request,method) \
CTL_CODE (FILE_DEVICE_UNKNOWN, request, method, FILE_ANY_ACCESS)
#define TAP_IOCTL_GET_MAC TAP_CONTROL_CODE (1, METHOD_BUFFERED)
#define TAP_IOCTL_GET_VERSION TAP_CONTROL_CODE (2, METHOD_BUFFERED)
#define TAP_IOCTL_GET_MTU TAP_CONTROL_CODE (3, METHOD_BUFFERED)
#define TAP_IOCTL_GET_INFO TAP_CONTROL_CODE (4, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_POINT_TO_POINT TAP_CONTROL_CODE (5, METHOD_BUFFERED)
#define TAP_IOCTL_SET_MEDIA_STATUS TAP_CONTROL_CODE (6, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_DHCP_MASQ TAP_CONTROL_CODE (7, METHOD_BUFFERED)
#define TAP_IOCTL_GET_LOG_LINE TAP_CONTROL_CODE (8, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_DHCP_SET_OPT TAP_CONTROL_CODE (9, METHOD_BUFFERED)
من دارم روی درایور tap tun کار میکنم،برای همین یک کدی رو از github دانلود کردم، یک قسمت از کد هست که متوجه نمیشم. توی این کد با استفاده از registry key ها میتونم آداپتر tap رو پیدا میکنه، بعد با crateFile یک handle براش ایجاد میکنه، بعد از اون با DeviceIoControl تنظیماتی رو روی اون انجام میده که مشکل من دقیقا همینجاست. من نمیتونم مفهوم درست DeviceIoControl رو درک کنم و همینطور کدهای CTL_CODE رو !یک قسمت از کد اینه:
#define TAP_CONTROL_CODE( request, method ) ( \
CTL_CODE( (FILE_DEVICE_UNKNOWN), (request), (method), 0) \
)
//*****************
if (DeviceIoControl (handle, TAP_CONTROL_CODE(3, 0),//TAP_WIN_IOCTL_GET_MTU,
&mtu, sizeof (mtu),
&mtu, sizeof (mtu), &len, NULL))
printf ("TAP-Windows MTU=%d\n", (int) mtu);
من حالا میخوام بدونم این عدد 3 در قسمت TAP_CONTROL_CODE(3, 0) کاربردش چیه؟ این اعداد یا بهتر بگم این کدها رو از کجا میشه پیدا کرد؟راسیتش نمیدونم چی باید سرچ کنم!!!
البته یک کد دیگه هم دانلود کردم که این موارد رو داشت:
#define TAP_CONTROL_CODE(request,method) \
CTL_CODE (FILE_DEVICE_UNKNOWN, request, method, FILE_ANY_ACCESS)
#define TAP_IOCTL_GET_MAC TAP_CONTROL_CODE (1, METHOD_BUFFERED)
#define TAP_IOCTL_GET_VERSION TAP_CONTROL_CODE (2, METHOD_BUFFERED)
#define TAP_IOCTL_GET_MTU TAP_CONTROL_CODE (3, METHOD_BUFFERED)
#define TAP_IOCTL_GET_INFO TAP_CONTROL_CODE (4, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_POINT_TO_POINT TAP_CONTROL_CODE (5, METHOD_BUFFERED)
#define TAP_IOCTL_SET_MEDIA_STATUS TAP_CONTROL_CODE (6, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_DHCP_MASQ TAP_CONTROL_CODE (7, METHOD_BUFFERED)
#define TAP_IOCTL_GET_LOG_LINE TAP_CONTROL_CODE (8, METHOD_BUFFERED)
#define TAP_IOCTL_CONFIG_DHCP_SET_OPT TAP_CONTROL_CODE (9, METHOD_BUFFERED)