Deleted Added
full compact
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 ---