def readFile(
        self,
        fileName,
        buffer,
        numberOfBytesToRead,
        numberOfBytesRead,
        offset,
        dokanFileInfo,
    ):
        """Read a file.

        :param fileName: name of file to read
        :type fileName: ctypes.c_wchar_p
        :param buffer: buffer for content read
        :type buffer: ctypes.c_void_p
        :param numberOfBytesToRead: number of bytes to read
        :type numberOfBytesToRead: ctypes.c_ulong
        :param numberOfBytesRead: number of bytes read
        :type numberOfBytesRead: ctypes.POINTER(ctypes.c_ulong)
        :param offset: byte offset
        :type offset: ctypes.c_longlong
        :param dokanFileInfo: used by Dokan
        :type dokanFileInfo: PDOKAN_FILE_INFO
        :return: error code
        :rtype: ctypes.c_int

        """
        try:
            ret = self.operations('readFile', fileName, numberOfBytesToRead, offset)
            data = ctypes.create_string_buffer(
                ret[:numberOfBytesToRead], numberOfBytesToRead
            )
            ctypes.memmove(buffer, data, numberOfBytesToRead)
            sizeRead = ctypes.c_ulong(len(ret))
            ctypes.memmove(
                numberOfBytesRead, ctypes.byref(sizeRead), ctypes.sizeof(ctypes.c_ulong)
            )
            return d1_onedrive.impl.drivers.dokan.const.DOKAN_SUCCESS
        except Exception:
            # logging.error('%s', e)
            return d1_onedrive.impl.drivers.dokan.const.DOKAN_ERROR