|
|
1.1 root 1: /*
2: * This program exchanges messages with out-of-line data with the kernel server
3: * named "mydriver".
4: */
5:
6: #import <mach/mach.h>
7: #import <mach/mach_error.h>
8: #import <servers/netname.h>
9: #import <ansi/stdlib.h>
10: #import <ansi/stdio.h>
11: #import "../Library/mydriver.h"
12: #import <bsd/strings.h>
13:
14: #define DATA "blah "
15: int main()
16: {
17: kern_return_t r;
18: port_name_t mydriver_port;
19: user_data_t data;
20: unsigned int data_len;
21:
22: /* Look up the advertised port of mydriver so we can send it a message. */
23: r = netname_look_up(name_server_port, "", "mydriver0", &mydriver_port);
24: if (r != KERN_SUCCESS)
25: {
26: mach_error("Can't find mydriver's advertised port", r);
27: exit(1);
28: }
29:
30: //
31: // Allocate space for data. Need to use vm_allocate to set up
32: // data or else the LKS won't get paged aligned data.
33: //
34: r = vm_allocate(task_self(), (vm_address_t *) &data, vm_page_size, TRUE);
35: if (r != KERN_SUCCESS)
36: {
37: mach_error("Call to vm_allocate failed", r);
38: exit(1);
39: }
40:
41: strcpy(data, DATA);
42: data_len = strlen(data) + 1;
43: printf("Data is: %s\n", data);
44:
45: /* Send out-of-line data to the LKS. */
46: printf("Calling mydriver_import().\n");
47: r = mydriver_import(mydriver_port, data, data_len);
48: if (r != KERN_SUCCESS)
49: {
50: mach_error("Error calling mydriver_import", r);
51: exit(1);
52: }
53:
54: /* remove the out_of_band data from our task's vm */
55: r = vm_deallocate(task_self(), (vm_address_t) data, vm_page_size);
56: if (r != KERN_SUCCESS)
57: {
58: mach_error("Error calling mydriver_import vm_deallocate", r);
59: exit(1);
60: }
61:
62: /* Receive out-of-line data from the LKS. */
63: printf("Calling mydriver_export().\n");
64: r = mydriver_export(mydriver_port, &data, &data_len);
65: if (r != KERN_SUCCESS)
66: {
67: mach_error("Error calling mydriver_export", r);
68: exit(1);
69: }
70:
71: printf("Trying to access data.\n");
72: printf("Contents of data are: %s\n", data);
73:
74: /* remove the out_of_band data from our task's vm */
75: r = vm_deallocate(task_self(), (vm_address_t) data, vm_page_size);
76: if (r != KERN_SUCCESS)
77: {
78: mach_error("Error calling mydriver_export vm_deallocate", r);
79: exit(1);
80: }
81:
82: return 0;
83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.