示例#1
0
文件: buffer.c 项目: Sha0/winkexec
/* Initialize a buffer. */
void KexecInitBuffer(PKEXEC_BUFFER KexecBuffer)
{
  ExInitializeFastMutex(&KexecBuffer->Mutex);
  LOCK_BUFFER(KexecBuffer);
  KexecClearBuffer(KexecBuffer);
  UNLOCK_BUFFER(KexecBuffer);
}
示例#2
0
文件: buffer.c 项目: Sha0/winkexec
/* Retrieve data from a buffer. */
NTSTATUS KexecGetBuffer(PKEXEC_BUFFER KexecBuffer, ULONG size, PVOID buf, DWORD* osize)
{
  LOCK_BUFFER(KexecBuffer);
  if (size < KexecBuffer->Size) {
    *osize = 0;
    UNLOCK_BUFFER(KexecBuffer);
    return STATUS_INSUFFICIENT_RESOURCES;
  }
  RtlCopyMemory(buf, KexecBuffer->Data, KexecBuffer->Size);
  *osize = KexecBuffer->Size;
  UNLOCK_BUFFER(KexecBuffer);
  return STATUS_SUCCESS;
}
示例#3
0
文件: rdp_gdi.c 项目: B0SB05/Remmina
static void rf_desktop_resize(rdpContext* context)
{
	RemminaProtocolWidget* gp;
	rfContext* rfi;

	rfi = (rfContext*) context;
	gp = rfi->protocol_widget;

	LOCK_BUFFER(TRUE)

	remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->DesktopWidth);
	remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->DesktopHeight);

	UNLOCK_BUFFER(TRUE)

	THREADS_ENTER
	remmina_rdp_event_update_scale(gp);
	THREADS_LEAVE

	remmina_plugin_service->protocol_plugin_emit_signal(gp, "desktop-resize");
}
示例#4
0
文件: buffer.c 项目: Sha0/winkexec
/* Load data into a buffer. */
NTSTATUS KexecLoadBuffer(PKEXEC_BUFFER KexecBuffer, ULONG size, PVOID data)
{
  ULONG alloc_size;
  /* Round the size up to the nearest multiple of 4096 to ensure that
     the buffer ends up on a page boundary.  */
  alloc_size = (size + 4095) & 0xffff000;

  LOCK_BUFFER(KexecBuffer);
  KexecFreeBuffer(KexecBuffer);
  KexecBuffer->Data = ExAllocatePoolWithTag(NonPagedPool,
    alloc_size, TAG('K', 'x', 'e', 'c'));
  if (!KexecBuffer->Data) {
    UNLOCK_BUFFER(KexecBuffer);
    return STATUS_INSUFFICIENT_RESOURCES;
  }
  KexecBuffer->Size = size;
  RtlCopyMemory(KexecBuffer->Data, data, size);
  KexecUpdateBufferHash(KexecBuffer);
  UNLOCK_BUFFER(KexecBuffer);
  return STATUS_SUCCESS;
}
示例#5
0
gboolean remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp)
{
	rfContext* rfi;
	RemminaPluginRdpUiObject* ui;

	rfi = GET_DATA(gp);

	ui = (RemminaPluginRdpUiObject*) g_async_queue_try_pop(rfi->ui_queue);

	if (ui)
	{
		switch (ui->type)
		{
			case REMMINA_RDP_UI_UPDATE_REGION:
				remmina_rdp_event_update_region(gp, ui);
				break;

			case REMMINA_RDP_UI_CONNECTED:
				remmina_rdp_event_connected(gp, ui);
				break;

			case REMMINA_RDP_UI_UPDATE_CURSOR:
				remmina_rdp_event_update_cursor(gp, ui);
				break;

			default:
				break;
		}
		rf_object_free(gp, ui);

		return TRUE;
	}
	else
	{
		LOCK_BUFFER(FALSE)
		rfi->ui_handler = 0;
		UNLOCK_BUFFER(FALSE)
		return FALSE;
	}
}
示例#6
0
文件: buffer.c 项目: Sha0/winkexec
/* Destroy a buffer. */
void KexecDestroyBuffer(PKEXEC_BUFFER KexecBuffer)
{
  LOCK_BUFFER(KexecBuffer);
  KexecFreeBuffer(KexecBuffer);
  UNLOCK_BUFFER(KexecBuffer);
}