private void SendListeningRequestToDriver()
        {
            //
            // Step 1
            // Open the handle to the driver with Overlapped async I/O flagged
            //
            SafeFileHandle device = null;

            try
            {
                device = DeviceIO.OpenDevice("\\\\.\\IPv6ToBle", true);
            }
            catch
            {
                int code = Marshal.GetLastWin32Error();

                DisplayErrorDialog("Could not open a handle to the driver, " +
                                   "error code: " + code.ToString()
                                   );
                return;
            }

            lock (numThreadsActiveLock)
            {
                NumThreadsActive++;
            }

            IAsyncResult result = DeviceIO.BeginGetPacketFromDriverAsync <byte[]>(device,
                                                                                  IPv6ToBleIoctl.IOCTL_IPV6_TO_BLE_LISTEN_NETWORK_V6,
                                                                                  1280,
                                                                                  IPv6ToBleListenCompletionCallback,
                                                                                  null
                                                                                  );
        }
        private void SendListenRequestToDriver()
        {
            //
            // Step 1
            // Open an async handle to the driver
            //
            SafeFileHandle device = null;

            try
            {
                device = DeviceIO.OpenDevice("\\\\.\\IPv6ToBle",
                                             true    // async
                                             );
            }
            catch (Win32Exception e)
            {
                Debug.WriteLine("Error opening handle to the driver. " +
                                "Error code: " + e.NativeErrorCode
                                );
                return;
            }

            //
            // Step 2
            // Begin an asynchronous operation to get a packet from the driver
            //
            IAsyncResult listenResult = DeviceIO.BeginGetPacketFromDriverAsync <byte[]>(
                device,
                IPv6ToBleIoctl.IOCTL_IPV6_TO_BLE_LISTEN_NETWORK_V6,
                1280,                            // 1280 bytes max
                PacketListenCompletionCallback,
                null                             // no specific state to track
                );

            if (listenResult == null)
            {
                Debug.WriteLine("Invalid request to listen for a packet.");
            }
        }