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>