|
|
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.