home *** CD-ROM | disk | FTP | other *** search
- /* mydriver_main.c: major functions of mydriver */
-
- #import <kernserv/kern_server_types.h>
- #import <kernserv/prototypes.h>
- #import "../Library/mydefs.h"
-
- kern_server_t instance;
-
- /* mydriver_init: Called when mydriver is loaded. */
- void mydriver_init(void)
- {
- printf("My driver loaded\n");
- }
-
- /* mydriver_signoff: Called when mydriver is unloaded. */
- void mydriver_signoff(void)
- {
- printf("My driver unloaded\n\n");
- }
-
- /* mydriver_import: Called by mydriver_server, which was created by MiG. */
- kern_return_t mydriver_import(port_t server, user_data_t user_data, unsigned int length)
- {
- kern_return_t r;
- user_data_t tmp, local_data;
- port_t kernel_task;
-
- kerhtask = kern_serv_kernel_task_port();
- tmp = local_data = (char *)kalloc(8192);
-
- printf("Calling vm_write\n");
- r = vm_write((vm_task_t)kernel_task, (vm_address_t)local_data,
- (pointer_t)user_data, 8192);
- if (r != KERN_SUCCESS)
- printf("Call to vmwrite failed \n");
- else {
- printf("Trying to access data.\n");
- printf("First data element is: %c\n", *tmp++);
- printf("Second data element is: %c\n", *tmp++);
- printf("Third data element is: %c\n", *tmp++);
- printf("Fourth data element is: %c\n", *tmp++);
- printf("Fifth data element is: %c\n", *tmp++);
-
- (void)strncpy(tmp, local_data, length);
- printf("Contents of data are: %s\n", tmp);
- }
- return KERN_SUCCESS;
- }
-
- /* mydriver_export: Called by mydriver_server, which was created by MiG. */
- kern_return_t mydriver_export(port_t server, user_data_t *user_data, unsigned int *length)
- {
- #define DATA "ACK"
- kern_return_t r;
- user_data_t local_data;
- port_t kernel_task;
- unsigned int tmp;
-
- /* Note that kalloc doesn't zero the memory it returns. */
- local_data = (user_data_t)kalloc(8192);
- local_data = strcpy (local_data, DATA);
- *length = strlen(local_data);
- printf("Data is: %s\n", local_data);
-
- /* Need to allocate space in our task's map. */
- r = vm_allocate((vm_task_t)task_self(),
- (vm_address_t *)user_data, 8192, TRUE);
- if (r != KERN_SUCCESS) {
- printf("Call to vm_allocate failed: %d\n", r);
- return KERN_FAILURE;
- }
-
- /* Copy data into our task's map. */
- kernel_task = kern_serv_kernel_task_port();
- r = vm_read((vm_task_t)kernel_task, (vm_address_t)local_data,
- 8192, (pointer_t *)user_data, &tmp);
- if (r != KERN_SUCCESS) {
- printf("Call to vm_read failed: %d\n", r);
- return KERN_FAILURE;
- }
-
- return KERN_SUCCESS;
- }