subr_ntoskrnl.c (189004) | subr_ntoskrnl.c (189488) |
---|---|
1/*- 2 * Copyright (c) 2003 3 * Bill Paul <wpaul@windriver.com>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2003 3 * Bill Paul <wpaul@windriver.com>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/sys/compat/ndis/subr_ntoskrnl.c 189004 2009-02-24 18:09:31Z rdivacky $"); | 34__FBSDID("$FreeBSD: head/sys/compat/ndis/subr_ntoskrnl.c 189488 2009-03-07 07:26:22Z weongyo $"); |
35 36#include <sys/ctype.h> 37#include <sys/unistd.h> 38#include <sys/param.h> 39#include <sys/types.h> 40#include <sys/errno.h> 41#include <sys/systm.h> 42#include <sys/malloc.h> --- 267 unchanged lines hidden (view full) --- 310#endif 311 bzero((char *)wq_queues, sizeof(kdpc_queue) * WORKITEM_THREADS); 312 313 /* 314 * Launch the DPC threads. 315 */ 316 317#ifdef NTOSKRNL_MULTIPLE_DPCS | 35 36#include <sys/ctype.h> 37#include <sys/unistd.h> 38#include <sys/param.h> 39#include <sys/types.h> 40#include <sys/errno.h> 41#include <sys/systm.h> 42#include <sys/malloc.h> --- 267 unchanged lines hidden (view full) --- 310#endif 311 bzero((char *)wq_queues, sizeof(kdpc_queue) * WORKITEM_THREADS); 312 313 /* 314 * Launch the DPC threads. 315 */ 316 317#ifdef NTOSKRNL_MULTIPLE_DPCS |
318 for (i = 0; i < mp_ncpus; i++) { | 318 for (i = 0; i < mp_ncpus; i++) { |
319#else | 319#else |
320 for (i = 0; i < 1; i++) { | 320 for (i = 0; i < 1; i++) { |
321#endif 322 kq = kq_queues + i; 323 kq->kq_cpu = i; 324 sprintf(name, "Windows DPC %d", i); 325 error = kproc_create(ntoskrnl_dpc_thread, kq, &p, 326 RFHIGHPID, NDIS_KSTACK_PAGES, name); 327 if (error) 328 panic("failed to launch DPC thread"); | 321#endif 322 kq = kq_queues + i; 323 kq->kq_cpu = i; 324 sprintf(name, "Windows DPC %d", i); 325 error = kproc_create(ntoskrnl_dpc_thread, kq, &p, 326 RFHIGHPID, NDIS_KSTACK_PAGES, name); 327 if (error) 328 panic("failed to launch DPC thread"); |
329 } | 329 } |
330 331 /* 332 * Launch the workitem threads. 333 */ 334 | 330 331 /* 332 * Launch the workitem threads. 333 */ 334 |
335 for (i = 0; i < WORKITEM_THREADS; i++) { | 335 for (i = 0; i < WORKITEM_THREADS; i++) { |
336 kq = wq_queues + i; 337 sprintf(name, "Windows Workitem %d", i); 338 error = kproc_create(ntoskrnl_workitem_thread, kq, &p, | 336 kq = wq_queues + i; 337 sprintf(name, "Windows Workitem %d", i); 338 error = kproc_create(ntoskrnl_workitem_thread, kq, &p, |
339 RFHIGHPID, NDIS_KSTACK_PAGES, name); | 339 RFHIGHPID, NDIS_KSTACK_PAGES, name); |
340 if (error) 341 panic("failed to launch workitem thread"); 342 } 343 344 patch = ntoskrnl_functbl; 345 while (patch->ipt_func != NULL) { 346 windrv_wrap((funcptr)patch->ipt_func, 347 (funcptr *)&patch->ipt_wrap, --- 145 unchanged lines hidden (view full) --- 493 while (*d != 0) 494 d++; 495 do { 496 if ((*d = *s++) == 0) 497 break; 498 d++; 499 } while (--n != 0); 500 *d = 0; | 340 if (error) 341 panic("failed to launch workitem thread"); 342 } 343 344 patch = ntoskrnl_functbl; 345 while (patch->ipt_func != NULL) { 346 windrv_wrap((funcptr)patch->ipt_func, 347 (funcptr *)&patch->ipt_wrap, --- 145 unchanged lines hidden (view full) --- 493 while (*d != 0) 494 d++; 495 do { 496 if ((*d = *s++) == 0) 497 break; 498 d++; 499 } while (--n != 0); 500 *d = 0; |
501 } 502 return (dst); | 501 } 502 return (dst); |
503} 504 505static int 506ntoskrnl_toupper(c) 507 int c; 508{ 509 return(toupper(c)); 510} 511 512static int 513ntoskrnl_tolower(c) 514 int c; 515{ 516 return(tolower(c)); 517} 518 | 503} 504 505static int 506ntoskrnl_toupper(c) 507 int c; 508{ 509 return(toupper(c)); 510} 511 512static int 513ntoskrnl_tolower(c) 514 int c; 515{ 516 return(tolower(c)); 517} 518 |
519static uint8_t | 519static uint8_t |
520RtlEqualUnicodeString(unicode_string *str1, unicode_string *str2, 521 uint8_t caseinsensitive) 522{ 523 int i; 524 525 if (str1->us_len != str2->us_len) 526 return(FALSE); 527 --- 398 unchanged lines hidden (view full) --- 926 } 927 928 if (func == IRP_MJ_WRITE) { 929 sl->isl_parameters.isl_write.isl_len = len; 930 if (off != NULL) 931 sl->isl_parameters.isl_write.isl_byteoff = *off; 932 else 933 sl->isl_parameters.isl_write.isl_byteoff = 0; | 520RtlEqualUnicodeString(unicode_string *str1, unicode_string *str2, 521 uint8_t caseinsensitive) 522{ 523 int i; 524 525 if (str1->us_len != str2->us_len) 526 return(FALSE); 527 --- 398 unchanged lines hidden (view full) --- 926 } 927 928 if (func == IRP_MJ_WRITE) { 929 sl->isl_parameters.isl_write.isl_len = len; 930 if (off != NULL) 931 sl->isl_parameters.isl_write.isl_byteoff = *off; 932 else 933 sl->isl_parameters.isl_write.isl_byteoff = 0; |
934 } | 934 } |
935 936 return(ip); 937} 938 939static irp * 940IoBuildDeviceIoControlRequest(uint32_t iocode, device_object *dobj, void *ibuf, 941 uint32_t ilen, void *obuf, uint32_t olen, uint8_t isinternal, 942 nt_kevent *event, io_status_block *status) --- 333 unchanged lines hidden (view full) --- 1276 1277uint8_t 1278KeSynchronizeExecution(iobj, syncfunc, syncctx) 1279 kinterrupt *iobj; 1280 void *syncfunc; 1281 void *syncctx; 1282{ 1283 uint8_t irql; | 935 936 return(ip); 937} 938 939static irp * 940IoBuildDeviceIoControlRequest(uint32_t iocode, device_object *dobj, void *ibuf, 941 uint32_t ilen, void *obuf, uint32_t olen, uint8_t isinternal, 942 nt_kevent *event, io_status_block *status) --- 333 unchanged lines hidden (view full) --- 1276 1277uint8_t 1278KeSynchronizeExecution(iobj, syncfunc, syncctx) 1279 kinterrupt *iobj; 1280 void *syncfunc; 1281 void *syncctx; 1282{ 1283 uint8_t irql; |
1284 | 1284 |
1285 KeAcquireSpinLock(&ntoskrnl_intlock, &irql); 1286 MSCALL1(syncfunc, syncctx); 1287 KeReleaseSpinLock(&ntoskrnl_intlock, irql); 1288 1289 return(TRUE); 1290} 1291 1292/* --- 117 unchanged lines hidden (view full) --- 1410 */ 1411 1412static int 1413ntoskrnl_is_signalled(obj, td) 1414 nt_dispatch_header *obj; 1415 struct thread *td; 1416{ 1417 kmutant *km; | 1285 KeAcquireSpinLock(&ntoskrnl_intlock, &irql); 1286 MSCALL1(syncfunc, syncctx); 1287 KeReleaseSpinLock(&ntoskrnl_intlock, irql); 1288 1289 return(TRUE); 1290} 1291 1292/* --- 117 unchanged lines hidden (view full) --- 1410 */ 1411 1412static int 1413ntoskrnl_is_signalled(obj, td) 1414 nt_dispatch_header *obj; 1415 struct thread *td; 1416{ 1417 kmutant *km; |
1418 | 1418 |
1419 if (obj->dh_type == DISP_TYPE_MUTANT) { 1420 km = (kmutant *)obj; 1421 if ((obj->dh_sigstate <= 0 && km->km_ownerthread == td) || 1422 obj->dh_sigstate == 1) 1423 return(TRUE); 1424 return(FALSE); 1425 } 1426 --- 380 unchanged lines hidden (view full) --- 1807 w->wb_waitkey = i; 1808 w->wb_awakened = FALSE; 1809 w->wb_oldpri = td->td_priority; 1810 w->wb_next = w + 1; 1811 w++; 1812 wcnt++; 1813 if (ntoskrnl_is_signalled(obj[i], td)) { 1814 /* | 1419 if (obj->dh_type == DISP_TYPE_MUTANT) { 1420 km = (kmutant *)obj; 1421 if ((obj->dh_sigstate <= 0 && km->km_ownerthread == td) || 1422 obj->dh_sigstate == 1) 1423 return(TRUE); 1424 return(FALSE); 1425 } 1426 --- 380 unchanged lines hidden (view full) --- 1807 w->wb_waitkey = i; 1808 w->wb_awakened = FALSE; 1809 w->wb_oldpri = td->td_priority; 1810 w->wb_next = w + 1; 1811 w++; 1812 wcnt++; 1813 if (ntoskrnl_is_signalled(obj[i], td)) { 1814 /* |
1815 * There's a limit to how many times 1816 * we can recursively acquire a mutant. 1817 * If we hit the limit, something | 1815 * There's a limit to how many times 1816 * we can recursively acquire a mutant. 1817 * If we hit the limit, something |
1818 * is very wrong. | 1818 * is very wrong. |
1819 */ | 1819 */ |
1820 if (obj[i]->dh_sigstate == INT32_MIN && 1821 obj[i]->dh_type == DISP_TYPE_MUTANT) { 1822 mtx_unlock(&ntoskrnl_dispatchlock); 1823 panic("mutant limit exceeded"); 1824 } 1825 1826 /* 1827 * If this is a WAITTYPE_ANY wait, then --- 28 unchanged lines hidden (view full) --- 1856 1857 /* 1858 * Create a circular waitblock list. The waitcount 1859 * must always be non-zero when we get here. 1860 */ 1861 1862 (w - 1)->wb_next = whead; 1863 | 1820 if (obj[i]->dh_sigstate == INT32_MIN && 1821 obj[i]->dh_type == DISP_TYPE_MUTANT) { 1822 mtx_unlock(&ntoskrnl_dispatchlock); 1823 panic("mutant limit exceeded"); 1824 } 1825 1826 /* 1827 * If this is a WAITTYPE_ANY wait, then --- 28 unchanged lines hidden (view full) --- 1856 1857 /* 1858 * Create a circular waitblock list. The waitcount 1859 * must always be non-zero when we get here. 1860 */ 1861 1862 (w - 1)->wb_next = whead; 1863 |
1864 /* Wait on any objects that aren't yet signalled. */ | 1864 /* Wait on any objects that aren't yet signalled. */ |
1865 1866 /* Calculate timeout, if any. */ 1867 1868 if (duetime != NULL) { 1869 if (*duetime < 0) { 1870 tv.tv_sec = - (*duetime) / 10000000; 1871 tv.tv_usec = (- (*duetime) / 10) - 1872 (tv.tv_sec * 1000000); --- 456 unchanged lines hidden (view full) --- 2329 atomic_store_rel_int((volatile u_int *)lock, 0); 2330 2331 return; 2332} 2333 2334uint8_t 2335KeAcquireSpinLockRaiseToDpc(kspin_lock *lock) 2336{ | 1865 1866 /* Calculate timeout, if any. */ 1867 1868 if (duetime != NULL) { 1869 if (*duetime < 0) { 1870 tv.tv_sec = - (*duetime) / 10000000; 1871 tv.tv_usec = (- (*duetime) / 10) - 1872 (tv.tv_sec * 1000000); --- 456 unchanged lines hidden (view full) --- 2329 atomic_store_rel_int((volatile u_int *)lock, 0); 2330 2331 return; 2332} 2333 2334uint8_t 2335KeAcquireSpinLockRaiseToDpc(kspin_lock *lock) 2336{ |
2337 uint8_t oldirql; | 2337 uint8_t oldirql; |
2338 | 2338 |
2339 if (KeGetCurrentIrql() > DISPATCH_LEVEL) 2340 panic("IRQL_NOT_LESS_THAN_OR_EQUAL"); | 2339 if (KeGetCurrentIrql() > DISPATCH_LEVEL) 2340 panic("IRQL_NOT_LESS_THAN_OR_EQUAL"); |
2341 | 2341 |
2342 KeRaiseIrql(DISPATCH_LEVEL, &oldirql); 2343 KeAcquireSpinLockAtDpcLevel(lock); | 2342 KeRaiseIrql(DISPATCH_LEVEL, &oldirql); 2343 KeAcquireSpinLockAtDpcLevel(lock); |
2344 | 2344 |
2345 return(oldirql); | 2345 return(oldirql); |
2346} 2347#else 2348void 2349KeAcquireSpinLockAtDpcLevel(kspin_lock *lock) 2350{ 2351 while (atomic_cmpset_acq_int((volatile u_int *)lock, 0, 1) == 0) 2352 /* sit and spin */; 2353 --- 105 unchanged lines hidden (view full) --- 2459 if (m == NULL) 2460 return; 2461 2462 if (m->mdl_flags & MDL_ZONE_ALLOCED) 2463 uma_zfree(mdl_zone, m); 2464 else 2465 ExFreePool(m); 2466 | 2346} 2347#else 2348void 2349KeAcquireSpinLockAtDpcLevel(kspin_lock *lock) 2350{ 2351 while (atomic_cmpset_acq_int((volatile u_int *)lock, 0, 1) == 0) 2352 /* sit and spin */; 2353 --- 105 unchanged lines hidden (view full) --- 2459 if (m == NULL) 2460 return; 2461 2462 if (m->mdl_flags & MDL_ZONE_ALLOCED) 2463 uma_zfree(mdl_zone, m); 2464 else 2465 ExFreePool(m); 2466 |
2467 return; | 2467 return; |
2468} 2469 2470static void * 2471MmAllocateContiguousMemory(size, highest) 2472 uint32_t size; 2473 uint64_t highest; 2474{ 2475 void *addr; --- 39 unchanged lines hidden (view full) --- 2515 2516static uint32_t 2517MmSizeOfMdl(vaddr, len) 2518 void *vaddr; 2519 size_t len; 2520{ 2521 uint32_t l; 2522 | 2468} 2469 2470static void * 2471MmAllocateContiguousMemory(size, highest) 2472 uint32_t size; 2473 uint64_t highest; 2474{ 2475 void *addr; --- 39 unchanged lines hidden (view full) --- 2515 2516static uint32_t 2517MmSizeOfMdl(vaddr, len) 2518 void *vaddr; 2519 size_t len; 2520{ 2521 uint32_t l; 2522 |
2523 l = sizeof(struct mdl) + | 2523 l = sizeof(struct mdl) + |
2524 (sizeof(vm_offset_t *) * SPAN_PAGES(vaddr, len)); 2525 2526 return(l); 2527} 2528 2529/* 2530 * The Microsoft documentation says this routine fills in the 2531 * page array of an MDL with the _physical_ page addresses that --- 169 unchanged lines hidden (view full) --- 2701 for (i = 0; i < childcnt; i++) { 2702 matching_dev = ntoskrnl_finddev(children[i], paddr, res); 2703 if (matching_dev != NULL) { 2704 free(children, M_TEMP); 2705 return(matching_dev); 2706 } 2707 } 2708 | 2524 (sizeof(vm_offset_t *) * SPAN_PAGES(vaddr, len)); 2525 2526 return(l); 2527} 2528 2529/* 2530 * The Microsoft documentation says this routine fills in the 2531 * page array of an MDL with the _physical_ page addresses that --- 169 unchanged lines hidden (view full) --- 2701 for (i = 0; i < childcnt; i++) { 2702 matching_dev = ntoskrnl_finddev(children[i], paddr, res); 2703 if (matching_dev != NULL) { 2704 free(children, M_TEMP); 2705 return(matching_dev); 2706 } 2707 } 2708 |
2709 | 2709 |
2710 /* Won't somebody please think of the children! */ 2711 2712 if (children != NULL) 2713 free(children, M_TEMP); 2714 2715 return(NULL); 2716} 2717 --- 41 unchanged lines hidden (view full) --- 2759 MSCALL2(iw->iw_func, iw->iw_dobj, iw->iw_ctx); 2760 KeAcquireSpinLock(&kq->kq_lock, &irql); 2761 } 2762 2763 KeReleaseSpinLock(&kq->kq_lock, irql); 2764 } 2765 2766#if __FreeBSD_version < 502113 | 2710 /* Won't somebody please think of the children! */ 2711 2712 if (children != NULL) 2713 free(children, M_TEMP); 2714 2715 return(NULL); 2716} 2717 --- 41 unchanged lines hidden (view full) --- 2759 MSCALL2(iw->iw_func, iw->iw_dobj, iw->iw_ctx); 2760 KeAcquireSpinLock(&kq->kq_lock, &irql); 2761 } 2762 2763 KeReleaseSpinLock(&kq->kq_lock, irql); 2764 } 2765 2766#if __FreeBSD_version < 502113 |
2767 mtx_lock(&Giant); | 2767 mtx_lock(&Giant); |
2768#endif | 2768#endif |
2769 kproc_exit(0); 2770 return; /* notreached */ | 2769 kproc_exit(0); 2770 return; /* notreached */ |
2771} 2772 2773static void 2774ntoskrnl_destroy_workitem_threads(void) 2775{ 2776 kdpc_queue *kq; 2777 int i; 2778 2779 for (i = 0; i < WORKITEM_THREADS; i++) { 2780 kq = wq_queues + i; 2781 kq->kq_exit = 1; | 2771} 2772 2773static void 2774ntoskrnl_destroy_workitem_threads(void) 2775{ 2776 kdpc_queue *kq; 2777 int i; 2778 2779 for (i = 0; i < WORKITEM_THREADS; i++) { 2780 kq = wq_queues + i; 2781 kq->kq_exit = 1; |
2782 KeSetEvent(&kq->kq_proc, IO_NO_INCREMENT, FALSE); | 2782 KeSetEvent(&kq->kq_proc, IO_NO_INCREMENT, FALSE); |
2783 while (kq->kq_exit) 2784 tsleep(kq->kq_td->td_proc, PWAIT, "waitiw", hz/10); 2785 } 2786 2787 return; 2788} 2789 2790io_workitem * --- 840 unchanged lines hidden (view full) --- 3631} 3632 3633#ifdef NTOSKRNL_DEBUG_TIMERS 3634static int 3635sysctl_show_timers(SYSCTL_HANDLER_ARGS) 3636{ 3637 int ret; 3638 | 2783 while (kq->kq_exit) 2784 tsleep(kq->kq_td->td_proc, PWAIT, "waitiw", hz/10); 2785 } 2786 2787 return; 2788} 2789 2790io_workitem * --- 840 unchanged lines hidden (view full) --- 3631} 3632 3633#ifdef NTOSKRNL_DEBUG_TIMERS 3634static int 3635sysctl_show_timers(SYSCTL_HANDLER_ARGS) 3636{ 3637 int ret; 3638 |
3639 ret = 0; | 3639 ret = 0; |
3640 ntoskrnl_show_timers(); | 3640 ntoskrnl_show_timers(); |
3641 return (sysctl_handle_int(oidp, &ret, 0, req)); | 3641 return (sysctl_handle_int(oidp, &ret, 0, req)); |
3642} 3643 3644static void 3645ntoskrnl_show_timers() 3646{ 3647 int i = 0; 3648 list_entry *l; 3649 --- 148 unchanged lines hidden (view full) --- 3798 */ 3799 3800 thread_lock(curthread); 3801#ifdef NTOSKRNL_MULTIPLE_DPCS 3802#if __FreeBSD_version >= 502102 3803 sched_bind(curthread, kq->kq_cpu); 3804#endif 3805#endif | 3642} 3643 3644static void 3645ntoskrnl_show_timers() 3646{ 3647 int i = 0; 3648 list_entry *l; 3649 --- 148 unchanged lines hidden (view full) --- 3798 */ 3799 3800 thread_lock(curthread); 3801#ifdef NTOSKRNL_MULTIPLE_DPCS 3802#if __FreeBSD_version >= 502102 3803 sched_bind(curthread, kq->kq_cpu); 3804#endif 3805#endif |
3806 sched_prio(curthread, PRI_MIN_KERN); | 3806 sched_prio(curthread, PRI_MIN_KERN); |
3807#if __FreeBSD_version < 600000 | 3807#if __FreeBSD_version < 600000 |
3808 curthread->td_base_pri = PRI_MIN_KERN; | 3808 curthread->td_base_pri = PRI_MIN_KERN; |
3809#endif 3810 thread_unlock(curthread); 3811 3812 while (1) { 3813 KeWaitForSingleObject(&kq->kq_proc, 0, 0, TRUE, NULL); 3814 3815 KeAcquireSpinLock(&kq->kq_lock, &irql); 3816 --- 18 unchanged lines hidden (view full) --- 3835 kq->kq_running = FALSE; 3836 3837 KeReleaseSpinLock(&kq->kq_lock, irql); 3838 3839 KeSetEvent(&kq->kq_done, IO_NO_INCREMENT, FALSE); 3840 } 3841 3842#if __FreeBSD_version < 502113 | 3809#endif 3810 thread_unlock(curthread); 3811 3812 while (1) { 3813 KeWaitForSingleObject(&kq->kq_proc, 0, 0, TRUE, NULL); 3814 3815 KeAcquireSpinLock(&kq->kq_lock, &irql); 3816 --- 18 unchanged lines hidden (view full) --- 3835 kq->kq_running = FALSE; 3836 3837 KeReleaseSpinLock(&kq->kq_lock, irql); 3838 3839 KeSetEvent(&kq->kq_done, IO_NO_INCREMENT, FALSE); 3840 } 3841 3842#if __FreeBSD_version < 502113 |
3843 mtx_lock(&Giant); | 3843 mtx_lock(&Giant); |
3844#endif | 3844#endif |
3845 kproc_exit(0); 3846 return; /* notreached */ | 3845 kproc_exit(0); 3846 return; /* notreached */ |
3847} 3848 3849static void 3850ntoskrnl_destroy_dpc_threads(void) 3851{ 3852 kdpc_queue *kq; 3853 kdpc dpc; 3854 int i; --- 460 unchanged lines hidden (view full) --- 4315 IMPORT_SFUNC(ExInitializePagedLookasideList, 7), 4316 IMPORT_SFUNC(ExDeletePagedLookasideList, 1), 4317 IMPORT_SFUNC(ExInitializeNPagedLookasideList, 7), 4318 IMPORT_SFUNC(ExDeleteNPagedLookasideList, 1), 4319 IMPORT_FFUNC(InterlockedPopEntrySList, 1), 4320 IMPORT_FFUNC(InterlockedPushEntrySList, 2), 4321 IMPORT_SFUNC(ExQueryDepthSList, 1), 4322 IMPORT_FFUNC_MAP(ExpInterlockedPopEntrySList, | 3847} 3848 3849static void 3850ntoskrnl_destroy_dpc_threads(void) 3851{ 3852 kdpc_queue *kq; 3853 kdpc dpc; 3854 int i; --- 460 unchanged lines hidden (view full) --- 4315 IMPORT_SFUNC(ExInitializePagedLookasideList, 7), 4316 IMPORT_SFUNC(ExDeletePagedLookasideList, 1), 4317 IMPORT_SFUNC(ExInitializeNPagedLookasideList, 7), 4318 IMPORT_SFUNC(ExDeleteNPagedLookasideList, 1), 4319 IMPORT_FFUNC(InterlockedPopEntrySList, 1), 4320 IMPORT_FFUNC(InterlockedPushEntrySList, 2), 4321 IMPORT_SFUNC(ExQueryDepthSList, 1), 4322 IMPORT_FFUNC_MAP(ExpInterlockedPopEntrySList, |
4323 InterlockedPopEntrySList, 1), | 4323 InterlockedPopEntrySList, 1), |
4324 IMPORT_FFUNC_MAP(ExpInterlockedPushEntrySList, 4325 InterlockedPushEntrySList, 2), 4326 IMPORT_FFUNC(ExInterlockedPopEntrySList, 2), 4327 IMPORT_FFUNC(ExInterlockedPushEntrySList, 3), 4328 IMPORT_SFUNC(ExAllocatePoolWithTag, 3), 4329 IMPORT_SFUNC(ExFreePool, 1), 4330#ifdef __i386__ 4331 IMPORT_FFUNC(KefAcquireSpinLockAtDpcLevel, 1), --- 92 unchanged lines hidden --- | 4324 IMPORT_FFUNC_MAP(ExpInterlockedPushEntrySList, 4325 InterlockedPushEntrySList, 2), 4326 IMPORT_FFUNC(ExInterlockedPopEntrySList, 2), 4327 IMPORT_FFUNC(ExInterlockedPushEntrySList, 3), 4328 IMPORT_SFUNC(ExAllocatePoolWithTag, 3), 4329 IMPORT_SFUNC(ExFreePool, 1), 4330#ifdef __i386__ 4331 IMPORT_FFUNC(KefAcquireSpinLockAtDpcLevel, 1), --- 92 unchanged lines hidden --- |