Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Oct 2007 02:54:44 -0700 (PDT)
From:      Abdullah Ibn Hamad Al-Marri <wearabnet@yahoo.ca>
To:        Scot Hetzel <swhetzel@gmail.com>, Marcin Simonides <marcin@studio4plus.com>
Cc:        freebsd-stable@freebsd.org, freebsd-mobile@freebsd.org
Subject:   Re: 7.0 BETA1 and Thinkpad T61p : Wireless misadventure
Message-ID:  <322454.36756.qm@web33713.mail.mud.yahoo.com>

next in thread | raw e-mail | index | archive | help
=0A----- Original Message ----=0A=0AFrom: Scot Hetzel <swhetzel@gmail.com>=
=0A=0ATo: Mike Pumford <mpumford@mpc-data.co.uk>=0A=0ACc: freebsd-mobile@fr=
eebsd.org; freebsd-stable@freebsd.org; Abdullah Ibn Hamad Al-Marri <wearabn=
et@yahoo.ca>=0A=0ASent: Wednesday, October 31, 2007 6:56:58 AM=0A=0ASubject=
: Re: 7.0 BETA1 and Thinkpad T61p : Wireless misadventure=0A=0A=0A=0A On 10=
/30/07, Mike Pumford <mpumford@mpc-data.co.uk> wrote:=0A=0A> Abdullah Ibn H=
amad Al-Marri wrote:=0A=0A>=0A=0A> >=0A=0A> > Previously I didn't mention t=
hat there are some functions missing  from=0A=0A> >=0A=0A> > the FreeBSD's =
NDIS api. These are:=0A=0A> >=0A=0A> > With the help of NDIS reference and =
Linux ndiswrapper I have been  able=0A=0A> >=0A=0A> > to implement all but =
KeBugCheckEx (they are all rather simple but I=0A=0A> >=0A=0A> Can help you=
 with this one. This is the Windows equivalent of  panic().=0A=0A> So just =
call panic with an appropriate string. If the string includes=0A=0A> the bu=
gcheck code and parameters so much the better.=0A=0A>=0A=0AThanks for your =
hint to use panic() in the KeBugCheckEx function.=0A=0AI have KeBugCheckEx =
partially implemented.  It currently prints the=0A=0Abugcheck code=0A=0Aand=
 the 4 paramators that are sent to KeBugCheckEx.=0A=0A=0A=0AThe KeBugCheckE=
x function still needs to be changed to display=0A=0Athe right information =
depending on the bugcheck code.=0A=0A=0A=0A=0A=0A=0A=0AAbdullah, I made a m=
inor change to your patch, strncat should be=0A=0Aprefixed with ntoskrnl_st=
rncat.=0A=0Achanged IMPORT_CFUNC(strncat..) to  IMPORT_CFUNC_MAP(ntoskrnl_s=
trncat..).=0A=0A=0A=0AScot=0A=0A=0A=0A=0A=0A-----Inline Attachment Follows-=
----=0A=0A=0A=0AIndex: ndis_var.h=0A=0A=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=0A=0ARCS file: /home/ncvs/src/sys/compat/ndis/ndis_var.h,v=
=0A=0Aretrieving revision 1.47=0A=0Adiff -u -r1.47 ndis_var.h=0A=0A--- ndis=
_var.h    6 Apr 2007 11:18:57 -0000    1.47=0A=0A+++ ndis_var.h    31 Oct 2=
007 03:31:24 -0000=0A=0A@@ -49,6 +49,10 @@=0A=0A typedef register_t ndis_ks=
pin_lock;=0A=0A typedef uint8_t ndis_kirql;=0A=0A =0A=0A+/* Version of NDIS=
 supported by FreeBSD */=0A=0A+#define    NDIS_VERSION_51            0x0005=
0001=0A=0A+#define    NDIS_VERSION            NDIS_VERSION_51=0A=0A+=0A=0A =
/*=0A=0A  * NDIS status codes (there are lots of them). The ones that=0A=0A=
  * don't seem to fit the pattern are actually mapped to generic=0A=0AIndex=
: ntoskrnl_var.h=0A=0A=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=0A=0ARCS file: /home/ncvs/src/sys/compat/ndis/ntoskrnl_var.h,v=0A=0Aretrie=
ving revision 1.43=0A=0Adiff -u -r1.43 ntoskrnl_var.h=0A=0A--- ntoskrnl_var=
.h    17 Aug 2006 22:50:32 -0000    1.43=0A=0A+++ ntoskrnl_var.h    31 Oct =
2007 03:31:24 -0000=0A=0A@@ -1202,14 +1202,22 @@=0A=0A =0A=0A /* Memory poo=
l types, for ExAllocatePoolWithTag() */=0A=0A =0A=0A-#define NonPagedPool  =
          0x00000000=0A=0A-#define PagedPool            0x00000001=0A=0A-#d=
efine NonPagedPoolMustSucceed        0x00000002=0A=0A-#define DontUseThisTy=
pe            0x00000003=0A=0A-#define NonPagedPoolCacheAligned    0x000000=
04=0A=0A-#define PagedPoolCacheAligned        0x00000005=0A=0A-#define NonP=
agedPoolCacheAlignedMustS    0x00000006=0A=0A-#define MaxPoolType          =
  0x00000007=0A=0A+#define    NonPagedPool                0x00000000=0A=0A+=
#define    PagedPool                0x00000001=0A=0A+#define    NonPagedPoo=
lMustSucceed            0x00000002=0A=0A+#define    DontUseThisType        =
        0x00000003=0A=0A+#define    NonPagedPoolCacheAligned        0x00000=
004=0A=0A+#define    PagedPoolCacheAligned            0x00000005=0A=0A+#def=
ine    NonPagedPoolCacheAlignedMustS        0x00000006=0A=0A+#define    Max=
PoolType                0x00000007=0A=0A+=0A=0A+#define    NonPagedPoolSess=
ion            0x00000020=0A=0A+#define    PagedPoolSession            0x00=
000021=0A=0A+#define    NonPagedPoolMustSucceedSession        0x00000022=0A=
=0A+#define    DontUseThisTypeSession            0x00000023=0A=0A+#define  =
  NonPagedPoolCacheAlignedSession        0x00000024=0A=0A+#define    PagedP=
oolCacheAlignedSession        0x00000025=0A=0A+#define    NonPagedPoolCache=
AlignedMustSSession    0x00000026=0A=0A =0A=0A /*=0A=0A  * IO_WORKITEM is a=
n opaque structures that must be allocated=0A=0A@@ -1357,8 +1365,12 @@=0A=
=0A extern uint8_t KeSynchronizeExecution(kinterrupt *, void *, void *);=0A=
=0A extern uintptr_t InterlockedExchange(volatile uint32_t *,=0A=0A     uin=
tptr_t);=0A=0A+extern void *ExAllocatePool(uint32_t, size_t);=0A=0A+extern =
void *ExAllocatePoolWithQuota(uint32_t, size_t);=0A=0A+extern void *ExAlloc=
atePoolWithQuotaTag(uint32_t, size_t, uint32_t);=0A=0A extern void *ExAlloc=
atePoolWithTag(uint32_t, size_t, uint32_t);=0A=0A extern void ExFreePool(vo=
id *);=0A=0A+extern void ExFreePoolWithTag(void *, uint32_t);=0A=0A extern =
uint32_t IoConnectInterrupt(kinterrupt **, void *, void *,=0A=0A     kspin_=
lock *, uint32_t, uint8_t, uint8_t, uint8_t, uint8_t,=0A=0A     uint32_t, u=
int8_t);=0A=0AIndex: subr_ndis.c=0A=0A=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=0A=0ARCS file: /home/ncvs/src/sys/compat/ndis/subr_ndis.c,v=
=0A=0Aretrieving revision 1.108=0A=0Adiff -u -r1.108 subr_ndis.c=0A=0A--- s=
ubr_ndis.c    31 May 2007 11:51:49 -0000    1.108=0A=0A+++ subr_ndis.c    3=
1 Oct 2007 03:31:24 -0000=0A=0A@@ -272,6 +272,7 @@=0A=0A static void NdisUn=
mapFile(ndis_handle);=0A=0A static void NdisCloseFile(ndis_handle);=0A=0A s=
tatic uint8_t NdisSystemProcessorCount(void);=0A=0A+static void NdisGetCurr=
entProcessorCounts(uint32_t *, uint32_t *,  uint32_t*);=0A=0A static void N=
disMIndicateStatusComplete(ndis_handle);=0A=0A static void NdisMIndicateSta=
tus(ndis_handle, ndis_status,=0A=0A         void *, uint32_t);=0A=0A@@ -282=
,6 +283,7 @@=0A=0A     uint32_t, uint32_t, ndis_packet *, uint32_t, uint32_=
t *);=0A=0A static void NdisCopyFromPacketToPacketSafe(ndis_packet *,=0A=0A=
     uint32_t, uint32_t, ndis_packet *, uint32_t, uint32_t *,  uint32_t);=
=0A=0A+static void NdisIMCopySendPerPacketInfo(ndis_packet *, ndis_packet *=
);=0A=0A static ndis_status NdisMRegisterDevice(ndis_handle,=0A=0A     unic=
ode_string *, unicode_string *, driver_dispatch **,=0A=0A     void **, ndis=
_handle *);=0A=0A@@ -3115,6 +3117,20 @@=0A=0A     return(mp_ncpus);=0A=0A }=
=0A=0A =0A=0A+static void=0A=0A+NdisGetCurrentProcessorCounts(idlecount, ke=
rneluser, index)=0A=0A+    uint32_t        *idlecount;=0A=0A+    uint32_t  =
      *kerneluser;=0A=0A+    uint32_t        *index;=0A=0A+{=0A=0A+    int =
cpu =3D 0; /* Current CPU */=0A=0A+=0A=0A+    *idlecount =3D cp_time[CP_IDL=
E];=0A=0A+    *kerneluser =3D    (cp_time[CP_USER] + cp_time[CP_NICE]) + \=
=0A=0A+            (cp_time[CP_SYS] + cp_time[CP_INTR]);=0A=0A+    *index =
=3D cpu;=0A=0A+}=0A=0A+=0A=0A typedef void (*ndis_statusdone_handler)(ndis_=
handle);=0A=0A typedef void (*ndis_status_handler)(ndis_handle, ndis_status=
,=0A=0A         void *, uint32_t);=0A=0A@@ -3288,6 +3304,14 @@=0A=0A     re=
turn;=0A=0A }=0A=0A =0A=0A+static void=0A=0A+NdisIMCopySendPerPacketInfo(dp=
kt, spkt)=0A=0A+    ndis_packet        *dpkt;=0A=0A+    ndis_packet        =
*spkt;=0A=0A+{=0A=0A+    memcpy(&dpkt->np_ext, &spkt->np_ext,  sizeof(ndis_=
packet_extension));=0A=0A+}=0A=0A+=0A=0A static ndis_status=0A=0A NdisMRegi=
sterDevice(handle, devname, symname, majorfuncs, devobj,  devhandle)=0A=0A =
    ndis_handle        handle;=0A=0A@@ -3346,6 +3370,12 @@=0A=0A     return=
;=0A=0A }=0A=0A =0A=0A+static uint32_t=0A=0A+NdisGetVersion()=0A=0A+{=0A=0A=
+    return(NDIS_VERSION);=0A=0A+}=0A=0A+=0A=0A static void=0A=0A dummy()=
=0A=0A {=0A=0A@@ -3365,10 +3395,12 @@=0A=0A image_patch_table ndis_functbl[=
] =3D {=0A=0A     IMPORT_SFUNC(NdisCopyFromPacketToPacket, 6),=0A=0A     IM=
PORT_SFUNC(NdisCopyFromPacketToPacketSafe, 7),=0A=0A+    IMPORT_SFUNC(NdisI=
MCopySendPerPacketInfo, 2),=0A=0A     IMPORT_SFUNC(NdisScheduleWorkItem, 1)=
,=0A=0A     IMPORT_SFUNC(NdisMIndicateStatusComplete, 1),=0A=0A     IMPORT_=
SFUNC(NdisMIndicateStatus, 4),=0A=0A     IMPORT_SFUNC(NdisSystemProcessorCo=
unt, 0),=0A=0A+    IMPORT_SFUNC(NdisGetCurrentProcessorCounts, 3),=0A=0A   =
  IMPORT_SFUNC(NdisUnchainBufferAtBack, 2),=0A=0A     IMPORT_SFUNC(NdisGetF=
irstBufferFromPacket, 5),=0A=0A     IMPORT_SFUNC(NdisGetFirstBufferFromPack=
etSafe, 6),=0A=0A@@ -3482,6 +3514,7 @@=0A=0A     IMPORT_SFUNC(NdisMDeregist=
erDevice, 1),=0A=0A     IMPORT_SFUNC(NdisMQueryAdapterInstanceName, 2),=0A=
=0A     IMPORT_SFUNC(NdisMRegisterUnloadHandler, 2),=0A=0A+    IMPORT_SFUNC=
(NdisGetVersion, 0),=0A=0A     IMPORT_SFUNC(ndis_timercall, 4),=0A=0A     I=
MPORT_SFUNC(ndis_asyncmem_complete, 2),=0A=0A     IMPORT_SFUNC(ndis_intr, 2=
),=0A=0AIndex: subr_ntoskrnl.c=0A=0A=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=0A=0ARCS file: /home/ncvs/src/sys/compat/ndis/subr_ntoskrnl.c,=
v=0A=0Aretrieving revision 1.91=0A=0Adiff -u -r1.91 subr_ntoskrnl.c=0A=0A--=
- subr_ntoskrnl.c    20 Oct 2007 23:23:12 -0000    1.91=0A=0A+++ subr_ntosk=
rnl.c    31 Oct 2007 03:31:24 -0000=0A=0A@@ -219,6 +219,8 @@=0A=0A static i=
nt rand(void);=0A=0A static void srand(unsigned int);=0A=0A static void nto=
skrnl_time(uint64_t *);=0A=0A+static void KeQuerySystemTime(uint64_t *);=0A=
=0A+static uint32_t KeTickCount(void);=0A=0A static uint8_t IoIsWdmVersionA=
vailable(uint8_t, uint8_t);=0A=0A static void ntoskrnl_thrfunc(void *);=0A=
=0A static ndis_status PsCreateSystemThread(ndis_handle *,=0A=0A@@ -226,6 +=
228,8 @@=0A=0A static ndis_status PsTerminateSystemThread(ndis_status);=0A=
=0A static ndis_status IoGetDeviceProperty(device_object *, uint32_t,=0A=0A=
     uint32_t, void *, uint32_t *);=0A=0A+static void KeBugCheckEx(uint32_t=
 , uint32_t *, uint32_t *, uint32_t  *,=0A=0A+    uint32_t *);=0A=0A static=
 void KeInitializeMutex(kmutant *, uint32_t);=0A=0A static uint32_t KeRelea=
seMutex(kmutant *, uint8_t);=0A=0A static uint32_t KeReadStateMutex(kmutant=
 *);=0A=0A@@ -238,8 +242,10 @@=0A=0A static uint32_t WmiTraceMessage(uint64=
_t, uint32_t, void *, uint16_t,  ...);=0A=0A static uint32_t IoWMIRegistrat=
ionControl(device_object *, uint32_t);=0A=0A static void *ntoskrnl_memset(v=
oid *, int, size_t);=0A=0A+static int ntoskrnl_memcmp(void *, void *, size_=
t);=0A=0A static void *ntoskrnl_memmove(void *, void *, size_t);=0A=0A stat=
ic void *ntoskrnl_memchr(void *, unsigned char, size_t);=0A=0A+static char =
*ntoskrnl_strncat(char *, char *, size_t);=0A=0A static char *ntoskrnl_strs=
tr(char *, char *);=0A=0A static int ntoskrnl_toupper(int);=0A=0A static in=
t ntoskrnl_tolower(int);=0A=0A@@ -429,6 +435,16 @@=0A=0A     return(memset(=
buf, ch, size));=0A=0A }=0A=0A =0A=0A+=0A=0A+static int=0A=0A+ntoskrnl_memc=
mp(buf1, buf2, size)=0A=0A+    void            *buf1;=0A=0A+    void       =
     *buf2;=0A=0A+    size_t            size;=0A=0A+{=0A=0A+    return(memc=
mp(buf1, buf2, size));=0A=0A+}=0A=0A+=0A=0A static void *=0A=0A ntoskrnl_me=
mmove(dst, src, size)=0A=0A     void            *src;=0A=0A@@ -456,6 +472,2=
9 @@=0A=0A     return (NULL);=0A=0A }=0A=0A =0A=0A+/* Taken from libc */=0A=
=0A+char *=0A=0A+ntoskrnl_strncat(dst, src, n)=0A=0A+    char        *dst;=
=0A=0A+    char        *src;=0A=0A+    size_t        n;=0A=0A+{=0A=0A+    i=
f (n !=3D 0) {=0A=0A+        char *d =3D dst;=0A=0A+        const char *s =
=3D src;=0A=0A+        =0A=0A+        while (*d !=3D 0)=0A=0A+            d=
++;=0A=0A+        do {=0A=0A+            if ((*d =3D *s++) =3D=3D 0)=0A=0A+=
                break;=0A=0A+            d++;=0A=0A+        } while (--n !=
=3D 0);=0A=0A+        *d =3D 0;=0A=0A+    }=0A=0A+    return (dst);=0A=0A+}=
=0A=0A+=0A=0A static char *=0A=0A ntoskrnl_strstr(s, find)=0A=0A     char *=
s, *find;=0A=0A@@ -624,6 +663,31 @@=0A=0A }=0A=0A =0A=0A void *=0A=0A+ExAll=
ocatePool(pooltype, len)=0A=0A+    uint32_t        pooltype;=0A=0A+    size=
_t            len;=0A=0A+{=0A=0A+    return(ExAllocatePoolWithTag(pooltype,=
 len, 0));=0A=0A+}=0A=0A+=0A=0A+void *=0A=0A+ExAllocatePoolWithQuota(poolty=
pe, len)=0A=0A+    uint32_t        pooltype;=0A=0A+    size_t            le=
n;=0A=0A+{=0A=0A+    return(ExAllocatePoolWithTag(pooltype, len, 0));=0A=0A=
+}=0A=0A+=0A=0A+void *=0A=0A+ExAllocatePoolWithQuotaTag(pooltype, len, tag)=
=0A=0A+    uint32_t        pooltype;=0A=0A+    size_t            len;=0A=0A=
+    uint32_t        tag;=0A=0A+{=0A=0A+    return(ExAllocatePoolWithTag(po=
oltype, len, tag));=0A=0A+}=0A=0A+=0A=0A+void *=0A=0A ExAllocatePoolWithTag=
(pooltype, len, tag)=0A=0A     uint32_t        pooltype;=0A=0A     size_t  =
          len;=0A=0A@@ -642,6 +706,14 @@=0A=0A ExFreePool(buf)=0A=0A     vo=
id            *buf;=0A=0A {=0A=0A+    ExFreePoolWithTag(buf, 0);=0A=0A+}=0A=
=0A+=0A=0A+void=0A=0A+ExFreePoolWithTag(buf, tag)=0A=0A+    void           =
 *buf;=0A=0A+    uint32_t        tag;=0A=0A+{=0A=0A     free(buf, M_DEVBUF)=
;=0A=0A     return;=0A=0A }=0A=0A@@ -1587,6 +1659,21 @@=0A=0A     return;=
=0A=0A }=0A=0A =0A=0A+static void=0A=0A+KeQuerySystemTime(current_time)=0A=
=0A+    uint64_t        *current_time;=0A=0A+{=0A=0A+    ntoskrnl_time(curr=
ent_time);=0A=0A+}=0A=0A+=0A=0A+static uint32_t=0A=0A+KeTickCount(void)=0A=
=0A+{=0A=0A+    struct timeval tv;=0A=0A+    getmicrouptime(&tv);=0A=0A+   =
 return tvtohz(&tv);=0A=0A+}=0A=0A+=0A=0A /*=0A=0A  * KeWaitForSingleObject=
() is a tricky beast, because it can be used=0A=0A  * with several differen=
t object types: semaphores, timers, events,=0A=0A@@ -2316,6 +2403,22 @@=0A=
=0A }=0A=0A =0A=0A void=0A=0A+KeBugCheckEx(bugcheck, param1, param2, param3=
, param4)=0A=0A+    uint32_t        bugcheck;=0A=0A+    uint32_t        *pa=
ram1;=0A=0A+    uint32_t        *param2;=0A=0A+    uint32_t        *param3;=
=0A=0A+    uint32_t        *param4;=0A=0A+{=0A=0A+    /* http://msdn2.micro=
soft.com/en-us/library/ms801645.aspx */=0A=0A+=0A=0A+    panic("KeBugCheckE=
x: STOP: %#08x, (%8p, %8p, %8p, %8p)",=0A=0A+        bugcheck, param1, para=
m2, param3, param4);=0A=0A+=0A=0A+        return;=0A=0A+}=0A=0A+=0A=0A+void=
=0A=0A KeInitializeSpinLock(lock)=0A=0A     kspin_lock        *lock;=0A=0A =
{=0A=0A@@ -2814,7 +2917,7 @@=0A=0A     for (i =3D 0; i < WORKITEM_THREADS; =
i++) {=0A=0A         kq =3D wq_queues + i;=0A=0A         kq->kq_exit =3D 1;=
=0A=0A-        KeSetEvent(&kq->kq_proc, IO_NO_INCREMENT, FALSE);    =0A=0A+=
        KeSetEvent(&kq->kq_proc, IO_NO_INCREMENT, FALSE);=0A=0A         whi=
le (kq->kq_exit)=0A=0A             tsleep(kq->kq_td->td_proc, PWAIT, "waiti=
w", hz/10);=0A=0A     }=0A=0A@@ -3182,7 +3285,10 @@=0A=0A     uint8_t      =
      major;=0A=0A     uint8_t            minor;=0A=0A {=0A=0A-    if (majo=
r =3D=3D WDM_MAJOR && minor =3D=3D WDM_MINOR_WINXP)=0A=0A+    if (major =3D=
=3D WDM_MAJOR && =0A=0A+       (minor =3D=3D WDM_MINOR_WIN2003    ||    /* =
Windows 2003 */=0A=0A+        minor =3D=3D WDM_MINOR_WINXP    ||    /* Wind=
ows XP */=0A=0A+        minor =3D=3D WDM_MINOR_WIN2000))    /* Windows 2000=
 */=0A=0A         return(TRUE);=0A=0A     return(FALSE);=0A=0A }=0A=0A@@ -4=
218,6 +4324,7 @@=0A=0A     IMPORT_CFUNC(strncmp, 0),=0A=0A     IMPORT_CFUNC=
(strcmp, 0),=0A=0A     IMPORT_CFUNC_MAP(stricmp, strcasecmp, 0),=0A=0A+    =
IMPORT_CFUNC_MAP(strncat, ntoskrnl_strncat, 0),=0A=0A     IMPORT_CFUNC(strn=
cpy, 0),=0A=0A     IMPORT_CFUNC(strcpy, 0),=0A=0A     IMPORT_CFUNC(strlen, =
0),=0A=0A@@ -4229,6 +4336,7 @@=0A=0A     IMPORT_CFUNC(memcpy, 0),=0A=0A    =
 IMPORT_CFUNC_MAP(memmove, ntoskrnl_memmove, 0),=0A=0A     IMPORT_CFUNC_MAP=
(memset, ntoskrnl_memset, 0),=0A=0A+    IMPORT_CFUNC_MAP(memcmp, ntoskrnl_m=
emcmp, 0),=0A=0A     IMPORT_CFUNC_MAP(memchr, ntoskrnl_memchr, 0),=0A=0A   =
  IMPORT_SFUNC(IoAllocateDriverObjectExtension, 4),=0A=0A     IMPORT_SFUNC(=
IoGetDriverObjectExtension, 2),=0A=0A@@ -4290,8 +4398,12 @@=0A=0A         I=
nterlockedPushEntrySList, 2),=0A=0A     IMPORT_FFUNC(ExInterlockedPopEntryS=
List, 2),=0A=0A     IMPORT_FFUNC(ExInterlockedPushEntrySList, 3),=0A=0A+   =
 IMPORT_SFUNC(ExAllocatePool, 2),=0A=0A+    IMPORT_SFUNC(ExAllocatePoolWith=
Quota, 2),=0A=0A+    IMPORT_SFUNC(ExAllocatePoolWithQuotaTag, 3),=0A=0A    =
 IMPORT_SFUNC(ExAllocatePoolWithTag, 3),=0A=0A     IMPORT_SFUNC(ExFreePool,=
 1),=0A=0A+    IMPORT_SFUNC(ExFreePoolWithTag, 2),=0A=0A #ifdef __i386__=0A=
=0A     IMPORT_FFUNC(KefAcquireSpinLockAtDpcLevel, 1),=0A=0A     IMPORT_FFU=
NC(KefReleaseSpinLockFromDpcLevel,1),=0A=0A@@ -4336,6 +4448,7 @@=0A=0A     =
IMPORT_SFUNC(IoQueueWorkItem, 4),=0A=0A     IMPORT_SFUNC(ExQueueWorkItem, 2=
),=0A=0A     IMPORT_SFUNC(ntoskrnl_workitem, 2),=0A=0A+    IMPORT_SFUNC(KeB=
ugCheckEx, 5),=0A=0A     IMPORT_SFUNC(KeInitializeMutex, 2),=0A=0A     IMPO=
RT_SFUNC(KeReleaseMutex, 2),=0A=0A     IMPORT_SFUNC(KeReadStateMutex, 1),=
=0A=0A@@ -4365,6 +4478,8 @@=0A=0A     IMPORT_SFUNC(IoWMIRegistrationControl=
, 2),=0A=0A     IMPORT_SFUNC(WmiQueryTraceInformation, 5),=0A=0A     IMPORT=
_CFUNC(WmiTraceMessage, 0),=0A=0A+    IMPORT_SFUNC(KeQuerySystemTime, 1),=
=0A=0A+    IMPORT_CFUNC(KeTickCount, 0),=0A=0A =0A=0A     /*=0A=0A      * T=
his last entry is a catch-all for any function we haven't=0A=0A=0A=0A=0A=0A=
=0A=0A-----Inline Attachment Follows-----=0A=0A=0A=0A____________=0A=0A=0AH=
ello Marcin,=0A=0ACould you please try this patch which modified by Mr. Sco=
t Hetzel please?=0A=0A=0A=0A-- =0A=0ARegards, =0A=0A-Abdullah Ibn Hamad Al-=
Marri=0A=0AArab Portal=0A=0Ahttp://www.WeArab.Net/=0A=0A=0A=0A=0A=0A=0A=0A=
=0A=0A=0A__________________________________________________=0ADo You Yahoo!=
?=0ATired of spam?  Yahoo! Mail has the best spam protection around =0Ahttp=
://mail.yahoo.com 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?322454.36756.qm>