<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Your Online Security Authority Blog</title>
	
	<link>http://www.onlinesecurityauthority.com</link>
	<description>Your Authority for Online Security in the next 5 years and beyond!</description>
	<lastBuildDate>Wed, 11 Nov 2009 14:47:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
<link>http://www.onlinesecurityauthority.com</link>
<url>http://www.onlinesecurityauthority.com/wp-content/mbp-favicon/favicon.ico</url>
<title>Your Online Security Authority Blog</title>
</image>
<cloud domain="www.onlinesecurityauthority.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/OnlineSecurityAuthority" type="application/rss+xml" /><feedburner:browserFriendly></feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Forbidding the Clipboard for the specified process</title>
		<link>http://www.onlinesecurityauthority.com/website-security/forbidding-the-clipboard-for-the-specified-process/</link>
		<comments>http://www.onlinesecurityauthority.com/website-security/forbidding-the-clipboard-for-the-specified-process/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:47:40 +0000</pubDate>
		<dc:creator>Online Security Authority</dc:creator>
				<category><![CDATA[Website Security]]></category>
		<category><![CDATA[C Developers]]></category>
		<category><![CDATA[C Programming Language]]></category>
		<category><![CDATA[Clipboard Overview]]></category>
		<category><![CDATA[Control Possibilities]]></category>
		<category><![CDATA[Data Exchange]]></category>
		<category><![CDATA[Familiar With Windows]]></category>
		<category><![CDATA[Hooks]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Kernel Mode Driver]]></category>
		<category><![CDATA[Notepad]]></category>
		<category><![CDATA[Project Implementation]]></category>
		<category><![CDATA[Shamray]]></category>
		<category><![CDATA[Software System]]></category>
		<category><![CDATA[Solution Description]]></category>
		<category><![CDATA[Unauthorized Data]]></category>
		<category><![CDATA[Windows Api]]></category>
		<category><![CDATA[Windows Clipboard]]></category>
		<category><![CDATA[Windows Operating System]]></category>
		<category><![CDATA[Windows Versions]]></category>
		<category><![CDATA[Wordpad]]></category>

		<guid isPermaLink="false">http://www.onlinesecurityauthority.com/website-security/forbidding-the-clipboard-for-the-specified-process/</guid>
		<description><![CDATA[Written by: Vladimir Shamray, Senior Developer
Contents
1.      Introduction  1.1.        The task  1.2.        Who is this article for?  2.      About the Windows Clipboard  2.1.        Clipboard overview  2.2.        How does it all work?  3.      Solution description  3.1.        Possible task solutions  3.2.        Project implementation  3.2.1.          How to find an unexported [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fforbidding-the-clipboard-for-the-specified-process%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fforbidding-the-clipboard-for-the-specified-process%2F" height="61" width="51" /></a></div><p>Written by:<br /> Vladimir Shamray,<br /> Senior Developer</p>
<h2>Contents</h2>
<p>1.      Introduction <br /> 1.1.        The task <br /> 1.2.        Who is this article for? <br /> 2.      About the Windows Clipboard <br /> 2.1.        Clipboard overview <br /> 2.2.        How does it all work? <br /> 3.      Solution description <br /> 3.1.        Possible task solutions <br /> 3.2.        Project implementation <br /> 3.2.1.          How to find an unexported function? <br /> 3.2.2.          Finding the signatures <br /> 3.2.3.          Function search implementation <br /> 3.2.4.          Setting hooks <br /> 3.2.5.          Hooks implementation <br /> 3.3.        Building the sample <br /> 3.4.        Supported Windows versions <br /> 4.      Conclusions <br /> 5.      Bibliography</p>
<h2><a></a>Introduction</h2>
<p>This article is based on the real task from the project I participated in, the task was to create a software system for protecting the Windows Clipboard against unauthorized data exchange. Though the Clipboard is one of the fundamental parts of the Windows operating system, there is little information about how it works, especially in the low level. In this article, I’m going to tell you something about the Clipboard internals by showing how you can forbid access to it. I simplified the task as much as it was possible to give you a possibility to focus on the most important parts.</p>
<h3><a></a>The task</h3>
<p>Create a program to forbid copying data via the Clipboard from one specified application (Wordpad) to another (Notepad). The names of the applications will be hardcoded. There will be no additional control possibilities. Also, no GUI is intended.</p>
<h3><a></a>Who is this article for</h3>
<p>The article is written for C/C++ developers, who are familiar with <a href="http://www.onlinesecurityauthority.com/recommends/OnlineCloudBackup" style="" target="_blank" rel="nofollow" onmouseover="self.status='OnlineCloudBackup';return true;" onmouseout="self.status=''">Windows</a> API and kernel-mode driver development and who are interested in how to work with the Clipboard on the low level.</p>
<p>The reader is supposed to have some knowledge in C programming language, Windows API (both user- and kernel-mode ones) and the OS architecture. The reader doesn’t have to be an expert in driver development but he/she has to know what drivers are and how to write the simplest one.</p>
<h2><a></a>About the Windows Clipboard</h2>
<h3><a></a>Clipboard overview</h3>
<p>As you know, the Clipboard is Windows component which enables applications to transfer data. An application places data into the clipboard for cut and copy operations and retrieves data from the clipboard for paste operations. Data in the clipboard can be in various formats. Each format is identified by an unsigned integer value.</p>
<p>An application places data into the clipboard in as many clipboard formats as possible, ordered from the most descriptive clipboard format to the least descriptive. For each format, the application calls the SetClipboardData function, specifying the format identifier and a global memory handle.</p>
<p>  <br />HANDLE SetClipboardData( <br /> UINT uFormat,<br /> HANDLE hMem<br /> );
<p>To retrieve data from the clipboard, an application first determines the clipboard format to retrieve. Typically, an application enumerates the available clipboard formats by using the EnumClipboardFormats function and uses the first format it recognizes. Alternatively, an application can use the GetPriorityClipboardFormat function. This function identifies the best available clipboard format according to the specified priority. An application can determine whether a format is available by using the IsClipboardFormatAvailable function.</p>
<p>After determining the clipboard format to use, an application calls the GetClipboardData function. This function returns the handle to a global memory object containing data in the specified format.</p>
<p>  <br />HANDLE GetClipboardData( <br /> UINT uFormat<br /> );
<p>Before doing some operations with the Clipboard, an application must open it with OpenClipboard function. After finishing all operations with the Clipboard it must be closed with CloseClipboard.</p>
<h3><a></a>How does it all work?</h3>
<p>The Clipboard is implemented as a part of the Windows subsystem. API functions of this subsystem, including Clipboard API, are in user32.dll dynamic library. But the main work is preformed in win32k.sys module, which is the kernel mode part of the <a href="http://www.onlinesecurityauthority.com/recommends/OnlineCloudBackup" style="" target="_blank" rel="nofollow" onmouseover="self.status='OnlineCloudBackup';return true;" onmouseout="self.status=''">Windows</a> subsystem. Win32k.sys is responsible for many things like managing <a href="http://www.onlinesecurityauthority.com/recommends/OnlineCloudBackup" style="" target="_blank" rel="nofollow" onmouseover="self.status='OnlineCloudBackup';return true;" onmouseout="self.status=''">windows</a> and window messages, drawing graphics, working with the clipboard, etc. Win32k.sys has more than 600 functions which are undocumented and not exported.</p>
<p>Before placing data into the Clipboard application allocates memory using GlobalAlloc function and copies the data to that memory. Eventually, application calls SetClipboard with a format code and a handle returned by GlobalAlloc as arguments. SetClipboardData in its turn makes call to the kernel-mode function NtUserSetClipboardData, which performes actual work.</p>
<p><img src="http://www.apriorit.com/images/articles/clipboard.png" /></p>
<p>When some other application wants to get data from the clipboard it calls GetClipboardData, which also calls the kernel-mode function inside itself, NtUserGetClipboardData. If retrieving the data is succeeded, it returns the handle of the data.</p>
<h2><a></a>Solution description</h2>
<h3><a></a>Possible task solutions</h3>
<p>Now, let’s get back to the task. We want to forbid copying data from one specific process to another. Copying some data via the Clipboard is actually separated on two independent operations: copy (or cut), which is represented by SetClipboardData and paste, represented by GetClipboardData. So, on copying we have to save the process name from which data is copied and on pasting we can choose, to allow or to forbid the copying.</p>
<p>There are two approaches. The first approach is to hook SetClipboardData and GetClipboardData in the user mode. Both functions are well documented and, that is much more important, they are exported. This is the main advantage. But this approach requires setting hooks for all processes in the system. Also we need to track creation of the new processes to set hooks in their address spaces too.</p>
<p>The second approach, which is described in this article, is to hook kernel-mode functions NtUserSetClipboardData and NtUserGetClipboardData. In this case we need to set hooks only once. But both functions are not exported from win32k.sys, so it is quite a problem to find them.</p>
<h3><a></a>Project implementation</h3>
<p> <a></a>How to find an unexported function?
<p>Hooking a couple of functions is not a big problem. But before that we need to find them. How to find a function which is not exported? One way is to hardcode the function address in the program. The address can be easily found manually, using WinDbg, for instance. Unfortunately, it is necessary to keep a base of these addresses for each operating system &#40;and, probably, for each service pack&#41; which you’re going to support.</p>
<p>Other way is to keep not an address but some sequence of bytes from which that address can be obtained. This sequence of bytes is called unique signature. It can be a piece of the function’s code or a piece of code from where the function is called. Though this way is not very portable too, it much less depends on differences between the various operating system versions.</p>
<p> <a></a>Finding the signatures
<p>First of all, we need to find the unique signatures for two functions: NtUserSetClipboardData and NtUserGetClipboardData. Both of them are in the win32k.sys. To do it, we will use WinDbg. Let’s start with the signature for NtUserGetClipboardData.</p>
<p>As I mentioned the function we’re looking for is in the win32k.sys and this module is mapped to a session address space, it means that it is available only in the context of some interactive process, like explorer.exe. To switch to explorer.exe, you can use !process 0 0 explorer.exe to get the address of its EPROCESS and then use .process command.</p>
<p>  <br />kd&gt; !process 0 0 explorer.exe<br />PROCESS 81946990 SessionId: 0 Cid: 063c Peb: 7ffd4000 ParentCid: 060c<br /> DirBase: 09b85000 ObjectTable: e19cafb8 HandleCount: 260.<br /> Image: explorer.exe<br /> <br />kd&gt; .process /p 81946990 <br />Implicit process is now 81946990<br />.cache forcedecodeuser done
<p>Let’s take a look at the NtUserGetClipboardData. We can see its disassembly using u debugger command</p>
<p>  <br />kd&gt; u win32k!NtUserGetClipboardData win32k!NtUserGetClipboardData+93<br />win32k!NtUserGetClipboardData:<br />bf8e9569 6a20 push 20h<br />bf8e956b 6888b198bf push offset win32k!`string&#8217;+0&#215;268 (bf98b188)<br />bf8e9570 e84376f1ff call win32k!_SEH_prolog (bf800bb8)<br />&#8230;
<p>Now, look at the piece in the middle of the function code, where xxxGetClipboardData is called. The first function argument is copied to a local variable, then the values of the three registers are placed into the stack and finally the xxxGetClipboardData is called. That piece of code seems to be suitable for using as the unique signature. On the one hand, it can be unique (actually, it is) and on the other hand, we can hope that it can be used not only for this version of Windows.</p>
<p>The last byte of the second instruction is an offset of a local variable which can be easily changed in another build. So, it won’t be included in the signature, as well as the last byte of the third instruction.</p>
<p><img src="http://www.apriorit.com/images/articles/windbg-03.PNG" /></p>
<p>After checking some other versions of Windows we decide to use the described sequence of bytes as the unique signature for the NtUserGetClipboardData function. Unique signature for the NtUserSetClipboardData can be found in the same way.</p>
<p> <a></a>Function search implementation
<p>Signatures of the functions are pieces of binary code inside them. Therefore, the process of finding a function address consists of two steps: search forward for the signature and search back for the start bytes of the function.</p>
<p><img src="http://www.apriorit.com/images/articles/signature.png" /></p>
<p>Because signatures may have “holes” (insignificant bits), it is necessary to implement comparison with mask, to compare only significant parts. It is implemented in function PlCompareSequence. PlSearchSequence contains implementation of the forward search using comparison with mask.</p>
<p> static int PlCompareSequence(const MASK_BUFFER* pPattern, const BUFFER* pTarget)<br />{<br /> size_t i = 0;<br /> <br /> if(pTarget-&gt;nSize &lt; pPattern-&gt;nSize)<br /> return 0;<br /> <br /> for(i = 0; i &lt; pPattern-&gt;nSize; ++i)<br /> {<br /> if ((pTarget-&gt;pStart[i] &amp; pPattern-&gt;pMask[i]) != pPattern-&gt;pStart[i])<br /> return 0;<br /> } <br /> return 1;<br />}<br /> <br /> <br />PLSTATUS PlSearchSequence(const MASK_BUFFER* pPattern, <br /> const BUFFER* pTarget, <br /> const char ** ppFirstPosition)<br />{<br /> size_t i = 0;<br /> <br /> if(pTarget-&gt;nSize &lt; pPattern-&gt;nSize)<br /> return PL_STATUS_NOT_FOUND;<br /> <br /> for(i = 0; i &lt; pTarget-&gt;nSize &#8211; pPattern-&gt;nSize; ++i)<br /> {<br /> BUFFER bufCurrentPiece = {pTarget-&gt;pStart + i, pPattern-&gt;nSize};<br /> <br /> if (PlCompareSequence(pPattern, &amp;bufCurrentPiece))<br /> {<br /> *ppFirstPosition = pTarget-&gt;pStart + i;<br /> return PL_STATUS_SUCCESS;<br /> }<br /> }<br /> <br /> return PL_STATUS_NOT_FOUND;<br />}
<p>Back search implementation is very similar to the forward search.</p>
<p>Structure MASK_BUFFER represents buffer which may have insignificant bits. It is represented by pointer to data, pointer to mask and length of both data and mask. This structure is used for storing signatures. Structure BUFFER represents plain buffer in memory, described by pointer to buffer and its length.</p>
<p> typedef struct MASK_BUFFER_<br />{<br /> const char* pStart;<br /> const char* pMask;<br /> size_t nSize;<br />} MASK_BUFFER;<br /> <br />typedef struct BUFFER_<br />{<br /> const char* pStart;<br /> size_t nSize;<br />} BUFFER;
<p>Function PlGetProcAddress is used for searching functions by signature. Firstly, it searches for the specified signature. If a match for the signature is found, it checks, is there are another matches for it. If there is only one match for the signature, then back search for the start bytes is performed.</p>
<p> PLSTATUS PlSingatureDuplicates(const BUFFER* pModule, <br /> const MASK_BUFFER* pSignature, <br /> const char* pMatchedSignature)<br />{<br /> const char* pTemp=0;<br /> BUFFER bufTemp = {pMatchedSignature + 1, pModule-&gt;nSize &#8211; (int)<br />(pMatchedSignature &#8211; pModule-&gt;pStart)};<br /> return (PlSearchSequence(pSignature, &amp;bufTemp, &amp;pTemp) == PL_STATUS_SUCCESS);<br />}<br /> <br />//////////////////////////////////////////////////////////////////////////<br /> <br />static size_t PlCalculateSearchAreaSize(const BUFFER* pModule, <br /> const char* pSignature, <br /> size_t nMaxSize)<br />{<br /> size_t nSignatureOffset = (size_t)(pSignature &#8211; pModule-&gt;pStart);</p>
<p> return (nSignatureOffset &lt; nMaxSize) ? nSignatureOffset : nMaxSize;<br />}<br /> <br />//////////////////////////////////////////////////////////////////////////<br /> <br />static PLSTATUS PlGetProcStart(const BUFFER* pModule, <br /> const char* pSequenceStart, <br /> size_t nMaxSignOffset, <br /> const MASK_BUFFER* pFncStart,<br /> void ** ppAddress)<br />{<br /> // Define search area<br /> size_t nSignatureOffset = (size_t)(pSequenceStart &#8211; pModule-&gt;pStart);<br /> size_t nSearchArea = PlCalculateSearchAreaSize(pModule, <br /> pSequenceStart,<br /> nMaxSignOffset);<br /> <br /> BUFFER bufFncSearchArea = {pSequenceStart, nSearchArea};<br /> <br /> // Search back for the function start bytes<br /> return PlSearchSequenceBack(pFncStart, <br /> &amp;bufFncSearchArea, <br /> (const char**)ppAddress);<br />}<br /> <br />PLSTATUS PlGetProcAddress(const BUFFER* pModule, <br /> const MASK_BUFFER* pSignature, <br /> size_t nMaxSignOffset,<br /> const MASK_BUFFER* pFncStart, <br /> void ** ppAddress)<br />{<br /> const char* pSequenceStart=0;<br /> <br /> // check unique key<br /> int status = PlSearchSequence(pSignature, pModule, &amp;pSequenceStart);<br /> if(status != PL_STATUS_SUCCESS)<br /> return status;<br /> <br /> // check duplicate<br /> if (PlSingatureDuplicates(pModule, pSignature, pSequenceStart))<br /> return PL_STATUS_SIGNATURE_NOT_UNIQUE;<br /> <br /> // now find the begining of the function<br /> return PlGetProcStart(pModule, <br /> pSequenceStart, <br /> nMaxSignOffset, <br /> pFncStart, <br /> ppAddress);<br />} <a></a>Setting hooks
<p>To hook the functions we’ll use a very common technique, so if it is familiar to you, you can just skip this part of the article.</p>
<p>The technique implies replacing the first bytes of a target function with a jump to our hook function, which has the same prototype. First bytes of the target function are to be copied to somewhere to keep the possibility to use the function. Hence, when user calls the target function he gets to the hook function.</p>
<p>But there is one thing to remember. You cannot divide an instruction into parts, so only whole instructions should be copied. It makes us to detect lengths of instructions we move. Also, if there are some relative addresses, they must be corrected after moving. To detect instruction length and relative addresses we’ll use slightly modified <a href="http://www.onlinesecurityauthority.com/recommends/WiFi.Security.Guy" style="" target="_blank" rel="nofollow" onmouseover="self.status='hacker';return true;" onmouseout="self.status=''">Hacker</a> Disassembler Engine, a small library by Veacheslav Patkov which suits well for the task.</p>
<p>Here are functions for moving binary code and writing jump instructions:</p>
<p> size_t CodeWriteJump(code_t* pFrom, const code_t* pTo)<br />{<br /> const code_t cInstrCode = &#8216;xE9&#8242;; // JUMP<br /> const size_t nInstSize = 1 + sizeof(void*);<br /> <br /> *(code_t*)(pFrom + 0) = cInstrCode; // Instruction code<br /> *(size_t*)(pFrom + 1) = pTo &#8211; (pFrom + nInstSize); // Offset<br /> <br /> return nInstSize;<br />}<br /> <br />size_t CodeDisplaceInstruction(code_t* pNew, code_t* pOld)<br />{<br /> // Parse instruction<br /> hde32s hs;<br /> hde32_disasm(pOld, &amp;hs);<br /> <br /> // Copy instruction<br /> RtlMoveMemory(pNew, pOld, hs.len);<br /> <br /> // Correct relative address, if there&#8217;s any<br /> if ((hs.flags &amp; F_REL8) == F_REL8)<br /> *(uint8_t* )(pNew + hs.imm_offset) -= (pNew &#8211; pOld);<br /> <br /> if ((hs.flags &amp; F_REL16) == F_REL16)<br /> *(uint16_t*)(pNew + hs.imm_offset) -= (pNew &#8211; pOld);<br /> <br /> if ((hs.flags &amp; F_REL32) == F_REL32)<br /> *(uint32_t*)(pNew + hs.imm_offset) -= (pNew &#8211; pOld);<br /> <br /> return hs.len;<br />}<br /> <br />size_t CodeDisplace(code_t* pDestination, code_t* pCode, size_t nSize)<br />{<br /> size_t nMoved = 0;<br /> <br /> while (nMoved &lt; nSize)<br /> nMoved += CodeDisplaceInstruction(pDestination + nMoved, <br /> pCode + nMoved);<br /> CodeFreeBuffer(pCode, nMoved);<br /> <br /> return nMoved;<br />}
<p>This functionality is used by PatchFunction function to perform hook in the way described above.</p>
<p>  <br />void* PatchFunction(void* pFunction, void* pHook)<br />{<br /> code_t* pFncStart = NULL;<br /> size_t nPosition = 0;<br /> <br /> ULONG oldCR0 = DisableWriteProtection();<br /> <br /> // Move some first bytes of original function <br /> pFncStart = CodeAllocate(100);<br /> if (pFncStart == NULL)<br /> return NULL;<br /> <br /> nPosition = CodeDisplace(pFncStart, pFunction, CodeJumpSize());<br /> nPosition += CodeWriteJump(pFncStart + nPosition, <br /> (code_t*)pFunction + nPosition);<br /> <br /> // Patch original function<br /> CodeWriteJump(pFunction, pHook);<br /> <br /> EnableWriteProtection(oldCR0);<br /> return pFncStart;<br />} <a></a>Hooks implementation
<p>Here is the implementation of the hook functions:</p>
<p>  <br />typedef struct _CLIPBOARD_CONTEXT<br />{<br /> UNICODE_STRING usFrom;<br /> UNICODE_STRING usTo;<br />} <br />CLIPBOARD_CONTEXT, *PCLIPBOARD_CONTEXT;<br /> <br />static PCLIPBOARD_CONTEXT g_pContext = NULL;<br /> <br />//////////////////////////////////////////////////////////////////////////<br /> <br />BOOLEAN IsPasteAllowed(PCLIPBOARD_CONTEXT pContext)<br />{<br /> UNICODE_STRING usWordpad, usNotepad;<br /> <br /> RtlInitUnicodeString(&amp;usWordpad, L&#8221;wordpad.exe&#8221;);<br /> RtlInitUnicodeString(&amp;usNotepad, L&#8221;notepad.exe&#8221;);<br /> <br /> if ((RtlCompareUnicodeString(&amp;pContext-&gt;usFrom, &amp;usWordpad, TRUE) == 0) &amp;&amp;<br /> (RtlCompareUnicodeString(&amp;pContext-&gt;usTo, &amp;usNotepad, TRUE) == 0))<br /> {<br /> DbgPrint(&#8221;Copying from WORDPAD.EXE to NOTEPAD.EXE is deniedn&#8221;);<br /> return FALSE;<br /> }<br /> else<br /> {<br /> return TRUE;<br /> }<br />}<br /> <br />//////////////////////////////////////////////////////////////////////////<br /> <br />ULONG __stdcall NtUserSetClipboardData_Hook(ULONG uFormat, HANDLE hParam, <br />PULONG pParam)<br />{<br /> ULONG uRetVal;<br /> NTSTATUS status;<br /> <br /> uRetVal = g_pNtUserSetClipboardData(uFormat, hParam, pParam);<br /> <br /> // Create clipboard context to store process names<br /> status = CreateContext(&amp;g_pContext);<br /> if (!NT_SUCCESS(status))<br /> goto cleanup;<br /> <br /> // Save name of the process, which puts data to the clipboard<br /> status = AllocUnicodeString(&amp;g_pContext-&gt;usFrom, 256);<br /> if (!NT_SUCCESS(status))<br /> goto cleanup;<br /> <br /> status = GetCurrentProcessName(&amp;g_pContext-&gt;usFrom);<br /> if (!NT_SUCCESS(status))<br /> goto cleanup;<br /> <br />cleanup:<br /> if (!NT_SUCCESS(status))<br /> FreeContext(g_pContext);<br /> <br /> return uRetVal;<br />}<br /> <br />//////////////////////////////////////////////////////////////////////////<br /> <br />HANDLE __stdcall NtUserGetClipboardData_Hook(ULONG uFormat, PVOID pParam)<br />{<br /> HANDLE hRetVal;<br /> NTSTATUS status;<br /> <br /> // Call the original function<br /> hRetVal = g_pNtUserGetClipboardData(uFormat, pParam);<br /> <br /> if (g_pContext == NULL)<br /> goto cleanup;<br /> <br /> // Save the name of the process, which gets data from the clipboard<br /> status = AllocUnicodeString(&amp;g_pContext-&gt;usTo, 256);<br /> if (!NT_SUCCESS(status))<br /> goto cleanup;<br /> <br /> status = GetCurrentProcessName(&amp;g_pContext-&gt;usTo);<br /> if (!NT_SUCCESS(status))<br /> goto cleanup;<br /> <br /> // If paste is forbidden, return NULL to the caller<br /> if (!IsPasteAllowed(g_pContext))<br /> hRetVal = NULL;<br /> <br />cleanup:<br /> return hRetVal;<br />}
<p>To store names of the source and destination processes, structure CLIPBOARD_CONTEXT is used. When NtUserSetClipboardData is called we save name of the current process in the usFrom field. When NtUserGetClipboardData is called, the name of the current process is stored in the usTo field. If both names  match the forbidding rule, we return NULL to caller, which indicates an error.</p>
<h3><a></a>Building the sample</h3>
<p>To build the code sample, you need to install Windows Driver Kit. Also you have to set an environment variable BASEDIR to the path where you have installed WDK.</p>
<p>After that you can just use Visual Studio to build the sample.</p>
<h3><a></a>Supported Windows versions</h3>
<p>The project was tested on the following versions of Windows:</p>
<ol>
<li>Windows XP (SP2 and SP3)</li>
<li>Windows 2003 Server</li>
<li>Windows Vista (SP1)</li>
</ol>
<h2><a></a>Conclusions</h2>
<p>In the article I described how to forbid the Clipboard for the specified process from a kernel-mode driver.  Because of the code sample in this article is made rather for educational purposes, it has some limitations. First of all, the sample works only on x86 operating systems. It also has never been tested on Windows 2000 and Windows 7. The sample may work incorrectly in a Remote Desktop session.</p>
<p>There is also one thing about forbidding copying data from the some process to itself. Some applications, like Microsoft Excel, can detect when data is copied and pasted within one process. If so, such applications may not use Clipboard API at all, therefore it makes some problems when you want to forbid it.</p>
<p>Download source code of the sample <a rel="nofollow" target="_blank" href="http://www.apriorit.com/our-articles/clipboard-protection.html">here</a>.</p>
<h2><a></a>Bibliography</h2>
<ul>
<li>MSDN Clipboard documentation</li>
<li>Mark E. Russinovich, David A. Solomon. Microsoft Windows Internals (4th Edition): Microsoft Windows Server 2003, Windows XP, and Windows 2000</li>
<li>Sven B. Schreiber. Undocumented Windows 2000 Secrets &#8211; A Programmer&#8217;s Cookbook</li>
</ul>
<!--INFOLINKS_OFF-->
<p>      <span style="font-size:90%;font-style:italic">
<p><b>Apriorit</b> is the provider of professional consulting and software development services. </p>
<p>Apriorit works in the areas of advanced system programming, driver development, software for devices.</p>
<p>One of the key values of Apriorit&#8217;s specialists is knowledge generation and sharing of experience.</p>
<p>Learn more about Apriorit and its experience at <a rel="nofollow" target="_blank" href="http://www.apriorit.com">Apriorit Official site</a></p>
<p>Article Source:<a target="_blank" href="http://www.articlesbase.com/programming-articles/forbidding-the-clipboard-for-the-specified-process-1446782.html" title="Forbidding the Clipboard for the specified process">http://www.articlesbase.com/programming-articles/forbidding-the-clipboard-for-the-specified-process-1446782.html</a><br />
</span></p>
<script type="text/javascript" class="owbutton" src="http://www.onlywire.com/btn/button_3500" title="Forbidding the Clipboard for the specified process" url="http://www.onlinesecurityauthority.com/website-security/forbidding-the-clipboard-for-the-specified-process/"></script>
<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>OSA Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/C+Developers' rel='tag' target='_blank'>C Developers</a>, <a class='technorati-link' href='http://technorati.com/tag/C+Programming+Language' rel='tag' target='_blank'>C Programming Language</a>, <a class='technorati-link' href='http://technorati.com/tag/Clipboard+Overview' rel='tag' target='_blank'>Clipboard Overview</a>, <a class='technorati-link' href='http://technorati.com/tag/Control+Possibilities' rel='tag' target='_blank'>Control Possibilities</a>, <a class='technorati-link' href='http://technorati.com/tag/Data+Exchange' rel='tag' target='_blank'>Data Exchange</a>, <a class='technorati-link' href='http://technorati.com/tag/Familiar+With+Windows' rel='tag' target='_blank'>Familiar With Windows</a>, <a class='technorati-link' href='http://technorati.com/tag/Hooks' rel='tag' target='_blank'>Hooks</a>, <a class='technorati-link' href='http://technorati.com/tag/Internals' rel='tag' target='_blank'>Internals</a>, <a class='technorati-link' href='http://technorati.com/tag/Kernel+Mode+Driver' rel='tag' target='_blank'>Kernel Mode Driver</a>, <a class='technorati-link' href='http://technorati.com/tag/Notepad' rel='tag' target='_blank'>Notepad</a>, <a class='technorati-link' href='http://technorati.com/tag/Project+Implementation' rel='tag' target='_blank'>Project Implementation</a>, <a class='technorati-link' href='http://technorati.com/tag/Shamray' rel='tag' target='_blank'>Shamray</a>, <a class='technorati-link' href='http://technorati.com/tag/Software+System' rel='tag' target='_blank'>Software System</a>, <a class='technorati-link' href='http://technorati.com/tag/Solution+Description' rel='tag' target='_blank'>Solution Description</a>, <a class='technorati-link' href='http://technorati.com/tag/Unauthorized+Data' rel='tag' target='_blank'>Unauthorized Data</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Api' rel='tag' target='_blank'>Windows Api</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Clipboard' rel='tag' target='_blank'>Windows Clipboard</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Operating+System' rel='tag' target='_blank'>Windows Operating System</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Versions' rel='tag' target='_blank'>Windows Versions</a>, <a class='technorati-link' href='http://technorati.com/tag/Wordpad' rel='tag' target='_blank'>Wordpad</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.onlinesecurityauthority.com/website-security/forbidding-the-clipboard-for-the-specified-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Online Security Authority website is trusted by the WOT community!</title>
		<link>http://www.onlinesecurityauthority.com/online-security-authority/online-security-authority-website/</link>
		<comments>http://www.onlinesecurityauthority.com/online-security-authority/online-security-authority-website/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:57:28 +0000</pubDate>
		<dc:creator>Online Security Authority</dc:creator>
				<category><![CDATA[Online Security Authority]]></category>
		<category><![CDATA[Authority Website]]></category>
		<category><![CDATA[Badges]]></category>
		<category><![CDATA[Building A Website]]></category>
		<category><![CDATA[Community Information]]></category>
		<category><![CDATA[Community Trust]]></category>
		<category><![CDATA[consumers]]></category>
		<category><![CDATA[Customer Confidence]]></category>
		<category><![CDATA[Download Free]]></category>
		<category><![CDATA[Experiences]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Feedback Tool]]></category>
		<category><![CDATA[Good Folks]]></category>
		<category><![CDATA[Honest Evaluation]]></category>
		<category><![CDATA[Internet Users]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Online Security]]></category>
		<category><![CDATA[OSA]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Purchase Decisions]]></category>
		<category><![CDATA[Related Articles]]></category>
		<category><![CDATA[Reputation]]></category>
		<category><![CDATA[Seals]]></category>
		<category><![CDATA[Share Comments]]></category>
		<category><![CDATA[Shoppers]]></category>
		<category><![CDATA[Shopping]]></category>
		<category><![CDATA[Small Business]]></category>
		<category><![CDATA[Surfing]]></category>
		<category><![CDATA[Trust Network]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Two Thirds]]></category>
		<category><![CDATA[Web Trust]]></category>
		<category><![CDATA[Worldwide Community]]></category>

		<guid isPermaLink="false">http://www.onlinesecurityauthority.com/?p=2662</guid>
		<description><![CDATA[Thanks to the good folks across the pond, for including the Online Security Authority website in their WOT Trusted community...  Please take a moment to go and give us and the community your honest evaluation at the WOT!]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fonline-security-authority%2Fonline-security-authority-website%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fonline-security-authority%2Fonline-security-authority-website%2F" height="61" width="51" /></a></div><p><strong>About Web of Trust</strong></p>
<p>WOT lets people like you share your experiences on the Web with others. Ratings from our worldwide community combined with information from trusted sources provide Internet users with up-to-date information on millions of websites.</p>
<blockquote><p>Seventy percent of shoppers abandon their online orders because they lack trust. The WOT Community Trust Network seals, badges, certificate and feedback tool can help you establish, build and maintain a positive reputation that increases customer confidence.</p></blockquote>
<p><center><a href="http://www.mywot.com/en/scorecard/onlinesecurityauthority.com"><img src="http://www.onlinesecurityauthority.com/wp-content/uploads/2009/11/onlinesecurityauthority.com-trusted-member-of-the-Community-Trust-Network.png" alt="imember-of-the-Community-Trust-Network" title="imember-of-the-Community-Trust-Network" class="aligncenter size-full wp-image-2663" height="612" width="500"/></a></center></p>
<blockquote><p>Two-thirds of consumers refer to online ratings before making purchase decisions. Giving your customers a voice on your website is important. WOT&#8217;s feedback tool enables your customers to rate your site on the spot and share comments, turning shoppers into buyers.</p></blockquote>
<p>Millions of people use WOT to stay safe while searching, shopping, and surfing on the Web, and to give feedback about the sites they visit. You are invited to download the <a href="http://www.onlinesecurityauthority.com/FreeWordpressBlog" style="" target="_blank"  onmouseover="self.status='free';return true;" onmouseout="self.status=''">free</a> add-on from  <a href="http://www.mywot.com/en/scorecard/onlinesecurityauthority.com">http://www.mywot.com</a></p>
<p>Thanks to the good folks across the pond, for including the <a href="http://www.onlinesecurityauthority.com/recommends/pc.care" style="" target="_blank" rel="nofollow" onmouseover="self.status='online security';return true;" onmouseout="self.status=''">Online Security</a> Authority website in their WOT Trusted community&#8230;</p>
<p>Please take a moment to go and give <a href="http://www.onlinesecurityauthority.com/FreeWordpressBlog" style="" target="_blank"  onmouseover="self.status='osa';return true;" onmouseout="self.status=''">OSA</a> and the community your honest evaluation, at the <a href="http://www.mywot.com/en/scorecard/onlinesecurityauthority.com">WOT</a> </p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.killerstartups.com/Web-App-Tools/fytch-com-annotating-the-web-as-you-go">Fytch.com &#8211; Annotating The Web As You Go</a> (killerstartups.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.sociableblog.com/2009/11/09/top-10-ways-to-use-twitter-for-marketing/">Top 10 Ways to Use Twitter for Marketing</a> (sociableblog.com)</li>
<li class="zemanta-article-ul-li"><a href="http://blog.seattlepi.com/thebizbite/archives/184571.asp?source=rss">Four questions to ask before building a website for your small business</a> (seattlepi.com)</li>
</ul>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/3cae8624-d276-440a-9ac8-3652e96a2af7/" title="Reblog this post [with Zemanta]"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_b.png?x-id=3cae8624-d276-440a-9ac8-3652e96a2af7" alt="Reblog this post [with Zemanta]"/></a><span class="zem-script more-info pretty-attribution paragraph-reblog"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<script type="text/javascript" class="owbutton" src="http://www.onlywire.com/btn/button_3500" title="Online Security Authority website is trusted by the WOT community!" url="http://www.onlinesecurityauthority.com/online-security-authority/online-security-authority-website/"></script>
<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>OSA Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Authority+Website' rel='tag' target='_blank'>Authority Website</a>, <a class='technorati-link' href='http://technorati.com/tag/Badges' rel='tag' target='_blank'>Badges</a>, <a class='technorati-link' href='http://technorati.com/tag/Building+A+Website' rel='tag' target='_blank'>Building A Website</a>, <a class='technorati-link' href='http://technorati.com/tag/Community+Information' rel='tag' target='_blank'>Community Information</a>, <a class='technorati-link' href='http://technorati.com/tag/Community+Trust' rel='tag' target='_blank'>Community Trust</a>, <a class='technorati-link' href='http://technorati.com/tag/consumers' rel='tag' target='_blank'>consumers</a>, <a class='technorati-link' href='http://technorati.com/tag/Customer+Confidence' rel='tag' target='_blank'>Customer Confidence</a>, <a class='technorati-link' href='http://technorati.com/tag/Download+Free' rel='tag' target='_blank'>Download Free</a>, <a class='technorati-link' href='http://technorati.com/tag/Experiences' rel='tag' target='_blank'>Experiences</a>, <a class='technorati-link' href='http://technorati.com/tag/Feedback' rel='tag' target='_blank'>Feedback</a>, <a class='technorati-link' href='http://technorati.com/tag/Feedback+Tool' rel='tag' target='_blank'>Feedback Tool</a>, <a class='technorati-link' href='http://technorati.com/tag/Good+Folks' rel='tag' target='_blank'>Good Folks</a>, <a class='technorati-link' href='http://technorati.com/tag/Honest+Evaluation' rel='tag' target='_blank'>Honest Evaluation</a>, <a class='technorati-link' href='http://technorati.com/tag/Internet+Users' rel='tag' target='_blank'>Internet Users</a>, <a class='technorati-link' href='http://technorati.com/tag/Marketing' rel='tag' target='_blank'>Marketing</a>, <a class='technorati-link' href='http://technorati.com/tag/Online+Security' rel='tag' target='_blank'>Online Security</a>, <a class='technorati-link' href='http://technorati.com/tag/OSA' rel='tag' target='_blank'>OSA</a>, <a class='technorati-link' href='http://technorati.com/tag/People' rel='tag' target='_blank'>People</a>, <a class='technorati-link' href='http://technorati.com/tag/Purchase+Decisions' rel='tag' target='_blank'>Purchase Decisions</a>, <a class='technorati-link' href='http://technorati.com/tag/Related+Articles' rel='tag' target='_blank'>Related Articles</a>, <a class='technorati-link' href='http://technorati.com/tag/Reputation' rel='tag' target='_blank'>Reputation</a>, <a class='technorati-link' href='http://technorati.com/tag/Seals' rel='tag' target='_blank'>Seals</a>, <a class='technorati-link' href='http://technorati.com/tag/Share+Comments' rel='tag' target='_blank'>Share Comments</a>, <a class='technorati-link' href='http://technorati.com/tag/Shoppers' rel='tag' target='_blank'>Shoppers</a>, <a class='technorati-link' href='http://technorati.com/tag/Shopping' rel='tag' target='_blank'>Shopping</a>, <a class='technorati-link' href='http://technorati.com/tag/Small+Business' rel='tag' target='_blank'>Small Business</a>, <a class='technorati-link' href='http://technorati.com/tag/Surfing' rel='tag' target='_blank'>Surfing</a>, <a class='technorati-link' href='http://technorati.com/tag/Trust+Network' rel='tag' target='_blank'>Trust Network</a>, <a class='technorati-link' href='http://technorati.com/tag/Twitter' rel='tag' target='_blank'>Twitter</a>, <a class='technorati-link' href='http://technorati.com/tag/Two+Thirds' rel='tag' target='_blank'>Two Thirds</a>, <a class='technorati-link' href='http://technorati.com/tag/Web+Trust' rel='tag' target='_blank'>Web Trust</a>, <a class='technorati-link' href='http://technorati.com/tag/Worldwide+Community' rel='tag' target='_blank'>Worldwide Community</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.onlinesecurityauthority.com/online-security-authority/online-security-authority-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PassQuick Nortel 920-146 Study Guide</title>
		<link>http://www.onlinesecurityauthority.com/website-security/passquick-nortel-920-146-study-guide/</link>
		<comments>http://www.onlinesecurityauthority.com/website-security/passquick-nortel-920-146-study-guide/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 17:17:23 +0000</pubDate>
		<dc:creator>Online Security Authority</dc:creator>
				<category><![CDATA[Website Security]]></category>
		<category><![CDATA[Amp]]></category>
		<category><![CDATA[Article Source]]></category>
		<category><![CDATA[Brain Dumps]]></category>
		<category><![CDATA[Center Server]]></category>
		<category><![CDATA[Certifications]]></category>
		<category><![CDATA[Exam Answers]]></category>
		<category><![CDATA[Free Demo]]></category>
		<category><![CDATA[Information Knowledge]]></category>
		<category><![CDATA[Interface Question]]></category>
		<category><![CDATA[Nortel]]></category>
		<category><![CDATA[Practice Exams]]></category>
		<category><![CDATA[Practice Test]]></category>
		<category><![CDATA[Preparation Tools]]></category>
		<category><![CDATA[Programming Articles]]></category>
		<category><![CDATA[Question Quality]]></category>
		<category><![CDATA[Questions And Answers]]></category>
		<category><![CDATA[Study Guides]]></category>
		<category><![CDATA[Study Material]]></category>
		<category><![CDATA[Symposium Call Center]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.onlinesecurityauthority.com/website-security/passquick-nortel-920-146-study-guide/</guid>
		<description><![CDATA[nncss-symposium call center server 5.0Exam Number/Code : 920-146 Exam Name : nncss-symposium call center server 5.0 920-146 Questions and Answers : 67 Q&#38;As 920-146 Update Time: 2009-09-05 920-146 Price: $ 99.00
PassQuick Nortel 920-146 Study Guide There are so many websites on internet that are providing knowledge, study material and information about the Nortel 920-146 certifications, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fpassquick-nortel-920-146-study-guide%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fpassquick-nortel-920-146-study-guide%2F" height="61" width="51" /></a></div><p><strong>nncss-symposium call center server 5.0</strong><br />Exam Number/Code : 920-146 <br />Exam Name : nncss-symposium call center server 5.0 <br />920-146 Questions and Answers : 67 Q&amp;As <br />920-146 Update Time: 2009-09-05 <br /><strong>920-146</strong> Price: $ 99.00</p>
<p><strong>PassQuick Nortel 920-146 Study Guide <br /></strong>There are so many websites on internet that are providing knowledge, study material and information about the Nortel 920-146 certifications, but there is one problem that the information that is provided by these websites is not of high quality and up-to-the-mark. Passquick is one website that provides you related, high quality and up-to-the-mark information, knowledge and study material about Nortel certifications.</p>
<p>Therefore to pass an examination you need to have some920-146exam notes, Nortel 920-146 study guides, which will help you, pass your certifications. This kind of help is provided by 920-146 Passquick, this site is fully equipped with <strong><a rel="nofollow" target="_blank" href="http://www.passquick.com/920-146.htm">920-146</a></strong> exam review, 920-146 practice papers, brain dumps, 920-146 study guides, 920-146 exam answers, practice test, <strong><a rel="nofollow" target="_blank" href="http://www.passquick.com/Nortel.htm">Nortel</a></strong> 920-146 braindump exam and many more preparation tools or exam resources making it easier for a candidate to pass 620-146 exam.Passquick is one website that provides you related, high quality and up-to-the-mark information, knowledge and study material about Nortel certifications.</p>
<p><strong><a href="http://www.onlinesecurityauthority.com/FreeWordpressBlog" style="" target="_blank"  onmouseover="self.status='free';return true;" onmouseout="self.status=''">Free</a> 920-146 Demo Download</strong></p>
<p>Passquick is one website that provides you related, high quality and up-to-the-mark information, knowledge and study material about Nortel certifications.<br /><strong><a rel="nofollow" target="_blank" href="http://www.passquick.com/">PassQuick</a></strong> offers <a href="http://www.onlinesecurityauthority.com/FreeWordpressBlog" style="" target="_blank"  onmouseover="self.status='free';return true;" onmouseout="self.status=''">free</a> demo for NCSS 920-146 exam (nncss-symposium call center server 5.0). You can check out the interface, question quality and usability of our practice exams before you decide to buy it. We are the only one site can offer demo for almost all products.</p>
<!--INFOLINKS_OFF-->
<p>      <span style="font-size:90%;font-style:italic">Article Source:<a target="_blank" href="http://www.articlesbase.com/programming-articles/passquick-nortel-920146-study-guide-1436602.html" title="PassQuick Nortel 920-146 Study Guide">http://www.articlesbase.com/programming-articles/passquick-nortel-920146-study-guide-1436602.html</a><br />
</span></p>
<script type="text/javascript" class="owbutton" src="http://www.onlywire.com/btn/button_3500" title="PassQuick Nortel 920-146 Study Guide" url="http://www.onlinesecurityauthority.com/website-security/passquick-nortel-920-146-study-guide/"></script>
<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>OSA Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Amp' rel='tag' target='_blank'>Amp</a>, <a class='technorati-link' href='http://technorati.com/tag/Article+Source' rel='tag' target='_blank'>Article Source</a>, <a class='technorati-link' href='http://technorati.com/tag/Brain+Dumps' rel='tag' target='_blank'>Brain Dumps</a>, <a class='technorati-link' href='http://technorati.com/tag/Center+Server' rel='tag' target='_blank'>Center Server</a>, <a class='technorati-link' href='http://technorati.com/tag/Certifications' rel='tag' target='_blank'>Certifications</a>, <a class='technorati-link' href='http://technorati.com/tag/Exam+Answers' rel='tag' target='_blank'>Exam Answers</a>, <a class='technorati-link' href='http://technorati.com/tag/Free+Demo' rel='tag' target='_blank'>Free Demo</a>, <a class='technorati-link' href='http://technorati.com/tag/Information+Knowledge' rel='tag' target='_blank'>Information Knowledge</a>, <a class='technorati-link' href='http://technorati.com/tag/Interface+Question' rel='tag' target='_blank'>Interface Question</a>, <a class='technorati-link' href='http://technorati.com/tag/Nortel' rel='tag' target='_blank'>Nortel</a>, <a class='technorati-link' href='http://technorati.com/tag/Practice+Exams' rel='tag' target='_blank'>Practice Exams</a>, <a class='technorati-link' href='http://technorati.com/tag/Practice+Test' rel='tag' target='_blank'>Practice Test</a>, <a class='technorati-link' href='http://technorati.com/tag/Preparation+Tools' rel='tag' target='_blank'>Preparation Tools</a>, <a class='technorati-link' href='http://technorati.com/tag/Programming+Articles' rel='tag' target='_blank'>Programming Articles</a>, <a class='technorati-link' href='http://technorati.com/tag/Question+Quality' rel='tag' target='_blank'>Question Quality</a>, <a class='technorati-link' href='http://technorati.com/tag/Questions+And+Answers' rel='tag' target='_blank'>Questions And Answers</a>, <a class='technorati-link' href='http://technorati.com/tag/Study+Guides' rel='tag' target='_blank'>Study Guides</a>, <a class='technorati-link' href='http://technorati.com/tag/Study+Material' rel='tag' target='_blank'>Study Material</a>, <a class='technorati-link' href='http://technorati.com/tag/Symposium+Call+Center' rel='tag' target='_blank'>Symposium Call Center</a>, <a class='technorati-link' href='http://technorati.com/tag/Usability' rel='tag' target='_blank'>Usability</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.onlinesecurityauthority.com/website-security/passquick-nortel-920-146-study-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dot Net Development: An Integral Part of Web Application Development</title>
		<link>http://www.onlinesecurityauthority.com/website-security/dot-net-development-an-integral-part-of-web-application-development-2/</link>
		<comments>http://www.onlinesecurityauthority.com/website-security/dot-net-development-an-integral-part-of-web-application-development-2/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 07:09:12 +0000</pubDate>
		<dc:creator>Online Security Authority</dc:creator>
				<category><![CDATA[Website Security]]></category>
		<category><![CDATA[Business Applications]]></category>
		<category><![CDATA[Business Processes]]></category>
		<category><![CDATA[Consistent Environment]]></category>
		<category><![CDATA[Database Driven Websites]]></category>
		<category><![CDATA[Developer Community]]></category>
		<category><![CDATA[Dot Net Framework]]></category>
		<category><![CDATA[Exchange Formats]]></category>
		<category><![CDATA[File Formats]]></category>
		<category><![CDATA[Internet Protocols]]></category>
		<category><![CDATA[Knack]]></category>
		<category><![CDATA[Microsoft Corporation]]></category>
		<category><![CDATA[Principal Advantages]]></category>
		<category><![CDATA[Robust Web Applications]]></category>
		<category><![CDATA[Soap Xml]]></category>
		<category><![CDATA[Software Application]]></category>
		<category><![CDATA[Software Interoperability]]></category>
		<category><![CDATA[Specific Solutions]]></category>
		<category><![CDATA[vital information]]></category>
		<category><![CDATA[Web Application Development]]></category>
		<category><![CDATA[Web Masters]]></category>

		<guid isPermaLink="false">http://www.onlinesecurityauthority.com/website-security/dot-net-development-an-integral-part-of-web-application-development-2/</guid>
		<description><![CDATA[What is Dot Net Development Service? 
Dot Net development services signify the development of web applications with the help of Dot Net Architecture released by the Microsoft Corporation. A bunch of the web application development work that is being outsourced to low cost locations is generally framed on the Dot Net framework.
Why does People have [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fdot-net-development-an-integral-part-of-web-application-development-2%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fdot-net-development-an-integral-part-of-web-application-development-2%2F" height="61" width="51" /></a></div><p><strong>What is Dot Net Development Service? </strong></p>
<p>Dot Net development services signify the development of web applications with the help of Dot Net Architecture released by the Microsoft Corporation. A bunch of the web application development work that is being outsourced to low cost locations is generally framed on the Dot Net framework.</p>
<p><strong>Why does People have a general knack for Dot Net? </strong></p>
<p>The Dot Net Architecture offers a dependable, scalable and consistent environment for building robust web applications. The mixture of traditional MS technologies and web services offered by the Dot Net Platform has found goodwill with the developer community.</p>
<p><strong>What are the principal advantages of Dot Net Platform? </strong></p>
<p>The advantage of making use of the Dot net platform is that it decreases the time and cost associated with developing and conserving business applications. Applications built on the Dot Net Platform enables the users to access vital information from any device. Developing web applications on the Dot Net platform is beneficial for one more reason. i.e. Software interoperability. The dot net architecture is quite suitable for developing database driven websites and applications as it ensures different programs to swap over data via a common set of exchange formats, to read and write the same file formats, and to make use of the same protocols. Most web masters prefer to design their applications on the Dot net platform since this reason only.</p>
<p><strong>The Interoperability Feature and its Applications: </strong></p>
<p>This ability to interoperate helps developers to generate specific solutions keeping in mind the exclusive business needs of the customers. Applications can be hosted either from within or on distant systems and a variety of modules of a software application can commune through standard internet protocols (XML and SOAP), XML Web services provide a direct means by which business processes can interrelate.</p>
<p><strong>Points to be kept in Mind while Choosing a Vendor: </strong></p>
<p>There are certain things which are required to be kept in mind while choosing a vendor for your web application development requirements. First, the engagement model has to be pre-decided i.e. you require to decide whether you want to hire devoted resources from a vendor or pay a vendor in accordance to the number of hours spent on the job . If you don&#8217;t want to work on any of the above-mentioned models then you can also decide to work with a vendor on the basis of a fixed cost in which the project has to be completed according to fixed dead-line and a fixed budget. Most clients who have small amounts of budgets originally meant for this type of engagement model as it makes sure that their costs do not rise over time. Clients with small amounts of budgets also prefer vendors of <a rel="nofollow" target="_blank" href="http://www.akrostechnology.com/"><strong>dot net development</strong></a> from low-cost locations like India as they can present highly trained manpower at economical rates.</p>
<!--INFOLINKS_OFF-->
<p>      <span style="font-size:90%;font-style:italic">
<p>Tyler Moon is an expert in article writing and internet marketing. She regularly contributes articles on various topics like security services, birth announcements etc.</p>
<p>Article Source:<a target="_blank" href="http://www.articlesbase.com/programming-articles/dot-net-development-an-integral-part-of-web-application-development-1414456.html" title="Dot Net Development: An Integral Part of Web Application Development">http://www.articlesbase.com/programming-articles/dot-net-development-an-integral-part-of-web-application-development-1414456.html</a><br />
</span></p>
<script type="text/javascript" class="owbutton" src="http://www.onlywire.com/btn/button_3500" title="Dot Net Development: An Integral Part of Web Application Development" url="http://www.onlinesecurityauthority.com/website-security/dot-net-development-an-integral-part-of-web-application-development-2/"></script>
<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>OSA Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Business+Applications' rel='tag' target='_blank'>Business Applications</a>, <a class='technorati-link' href='http://technorati.com/tag/Business+Processes' rel='tag' target='_blank'>Business Processes</a>, <a class='technorati-link' href='http://technorati.com/tag/Consistent+Environment' rel='tag' target='_blank'>Consistent Environment</a>, <a class='technorati-link' href='http://technorati.com/tag/Database+Driven+Websites' rel='tag' target='_blank'>Database Driven Websites</a>, <a class='technorati-link' href='http://technorati.com/tag/Developer+Community' rel='tag' target='_blank'>Developer Community</a>, <a class='technorati-link' href='http://technorati.com/tag/Dot+Net+Framework' rel='tag' target='_blank'>Dot Net Framework</a>, <a class='technorati-link' href='http://technorati.com/tag/Exchange+Formats' rel='tag' target='_blank'>Exchange Formats</a>, <a class='technorati-link' href='http://technorati.com/tag/File+Formats' rel='tag' target='_blank'>File Formats</a>, <a class='technorati-link' href='http://technorati.com/tag/Internet+Protocols' rel='tag' target='_blank'>Internet Protocols</a>, <a class='technorati-link' href='http://technorati.com/tag/Knack' rel='tag' target='_blank'>Knack</a>, <a class='technorati-link' href='http://technorati.com/tag/Microsoft+Corporation' rel='tag' target='_blank'>Microsoft Corporation</a>, <a class='technorati-link' href='http://technorati.com/tag/Principal+Advantages' rel='tag' target='_blank'>Principal Advantages</a>, <a class='technorati-link' href='http://technorati.com/tag/Robust+Web+Applications' rel='tag' target='_blank'>Robust Web Applications</a>, <a class='technorati-link' href='http://technorati.com/tag/Soap+Xml' rel='tag' target='_blank'>Soap Xml</a>, <a class='technorati-link' href='http://technorati.com/tag/Software+Application' rel='tag' target='_blank'>Software Application</a>, <a class='technorati-link' href='http://technorati.com/tag/Software+Interoperability' rel='tag' target='_blank'>Software Interoperability</a>, <a class='technorati-link' href='http://technorati.com/tag/Specific+Solutions' rel='tag' target='_blank'>Specific Solutions</a>, <a class='technorati-link' href='http://technorati.com/tag/vital+information' rel='tag' target='_blank'>vital information</a>, <a class='technorati-link' href='http://technorati.com/tag/Web+Application+Development' rel='tag' target='_blank'>Web Application Development</a>, <a class='technorati-link' href='http://technorati.com/tag/Web+Masters' rel='tag' target='_blank'>Web Masters</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.onlinesecurityauthority.com/website-security/dot-net-development-an-integral-part-of-web-application-development-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Event Registration Service Can Eliminate Much Event Planning Stress</title>
		<link>http://www.onlinesecurityauthority.com/website-security/an-event-registration-service-can-eliminate-much-event-planning-stress/</link>
		<comments>http://www.onlinesecurityauthority.com/website-security/an-event-registration-service-can-eliminate-much-event-planning-stress/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 13:18:52 +0000</pubDate>
		<dc:creator>Online Security Authority</dc:creator>
				<category><![CDATA[Website Security]]></category>
		<category><![CDATA[Audience]]></category>
		<category><![CDATA[E Mail]]></category>
		<category><![CDATA[Event Planning]]></category>
		<category><![CDATA[Event Registration Service]]></category>
		<category><![CDATA[Event Security]]></category>
		<category><![CDATA[Few Minutes]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Hosts]]></category>
		<category><![CDATA[Invitations]]></category>
		<category><![CDATA[Invitees]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Limited]]></category>
		<category><![CDATA[Registrants]]></category>
		<category><![CDATA[Registration Interface]]></category>
		<category><![CDATA[Scenarios]]></category>
		<category><![CDATA[Stress]]></category>
		<category><![CDATA[Vet]]></category>
		<category><![CDATA[Web Page Link]]></category>

		<guid isPermaLink="false">http://www.onlinesecurityauthority.com/website-security/an-event-registration-service-can-eliminate-much-event-planning-stress/</guid>
		<description><![CDATA[An efficient event registration service can be crucial to the success of a special event. With the tremendous effort that goes into event planning, many hosts overlook how important it is to think about the actual event registration process. It may be assumed that mailing invitations will do the job, but there are much more [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fan-event-registration-service-can-eliminate-much-event-planning-stress%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.onlinesecurityauthority.com%2Fwebsite-security%2Fan-event-registration-service-can-eliminate-much-event-planning-stress%2F" height="61" width="51" /></a></div><p>An efficient <strong><a rel="nofollow" target="_blank" href="http://www.event-registration-service.com/">event registration service</a></strong> can be crucial to the success of a special event. With the tremendous effort that goes into event planning, many hosts overlook how important it is to think about the actual event registration process. It may be assumed that mailing invitations will do the job, but there are much more efficient ways to handle this important step. RegisterToAttend.com’s event registration service is one of the most efficient and professional ways to manage event registration.</p>
<p>What should an event registration service do? <a rel="nofollow" target="_blank" href="https://www.registertoattend.com/(khp5cnz51wrmhamszei40ayq)/register/RegisterStart.aspx">Event registration</a> may be as simple as recording the names of people that wish to attend then event. But it can also be more complicated, particularly if the event has a limited number of seats, if the event charges any fees, or if the host wishes to obtain information from registrants prior to or after the event. Security may mean that the host wishes to vet the list of registrants in advance of the event, or restrict information about the event to a small audience. An event registration service should be equipped to handle all of these scenarios. Most importantly, an event registration service should be easy-to-use and professional. RegisterToAttend.com is just such an event registration service.</p>
<p>RegisterToAttend.com is an event registration service designed to manage every aspect of your event registration needs, freeing your time and resources to tend to the more important aspects of organizing and hosting a successful event. Setting up your custom Event Web Page, which is your personalized event registration interface, is the first step. Setting up this custom event registration interface only takes a few minutes. When complete, you’ll receive an Event Web Page link (URL) that can be used in e-mail invitations or on your website, if you have one. Your invitees simply click on the link, which opens your Event Web Page, where they register to attend your event.</p>
<p>Once your Event Web Page is set-up, your event can be announced to your entire list of invitees using RegisterToAttend.com’s Control Panel <em>E-mail Broadcast </em>feature. The Control Panel allows you to view the names of all registrants at any time, see how much has been collected (for paid events), send information (documents, etc.), and communicate via e-mail. E-mail contact with the full list of registrants solves many communications issues that can be typical in event management. And, don&#8217;t worry about a map or directions; every Event Web Page has a map as an automatic feature upon set-up.</p>
<p>If you wish to ask your registrants questions during registration, this is easily accomplished with RegisterToAttend.com’s <a rel="nofollow" target="_blank" href="http://www.registertoattend.com/(u4rge03zpd2wg145yswarly5)/help/VendorLearnMore.aspx">event registration service</a>. When you set up your Event Web Page, you can specify up to ten questions to ask your registrants as they register, and view their answers at the Control Panel. For paid events, you can even designate discounts for early-bird registration and multiple registrants, such as registering a full table of guests. The features go on and on!</p>
<p>RegisterToAttend.com is an innovative event registration service developed to eliminate the need for hours of scheduling, phone calls, and guest checklists. Best of all, your registrants will find registering for your event to be an easy and pleasurable experience – getting your event off to a great start, well in advance.</p>
<p>RegisterToAttend.com’s many features are the solution to the event registration service challenge. Only RegisterToAttend.com brings you such a powerful tool for your event planning. RegisterToAttend.com provides ease-of-use, security, <a href="http://www.onlinesecurityauthority.com/recommends/ID.Theft" style="" target="_blank" rel="nofollow" onmouseover="self.status='privacy';return true;" onmouseout="self.status=''">privacy</a>, and customization. Trust RegisterToAttend.com to assist with your event registration service needs.</p>
<!--INFOLINKS_OFF-->
<p>      <span style="font-size:90%;font-style:italic">
<p>Contact Us<br /> RegisterToAttend.com<br /> 8504 Firestone   Blvd., Suite 400<br /> Downey, CA 90241<br /> 888.894.7776 Toll <a href="http://www.onlinesecurityauthority.com/FreeWordpressBlog" style="" target="_blank"  onmouseover="self.status='free';return true;" onmouseout="self.status=''">Free</a><br /> 562.923.4348 Local Calls<br /> 562.684.4832 Fax<br /> M-F 8AM-5PM Pacific<br /> <a rel="nofollow" target="_blank" href="mailto:admin@registertoattend.com" title="admin@registertoattend.com">admin@registertoattend.com</a><br /> Website Source : <a rel="nofollow" target="_blank" href="http://www.event-registration-service.com/" title="Event Registration Service"><strong>Event Registration Service</strong></a></p>
<p>Article Source:<a target="_blank" href="http://www.articlesbase.com/programming-articles/an-event-registration-service-can-eliminate-much-event-planning-stress-1427114.html" title="An Event Registration Service Can Eliminate Much Event Planning Stress">http://www.articlesbase.com/programming-articles/an-event-registration-service-can-eliminate-much-event-planning-stress-1427114.html</a><br />
</span></p>
<script type="text/javascript" class="owbutton" src="http://www.onlywire.com/btn/button_3500" title="An Event Registration Service Can Eliminate Much Event Planning Stress" url="http://www.onlinesecurityauthority.com/website-security/an-event-registration-service-can-eliminate-much-event-planning-stress/"></script>
<!-- start wp-tags-to-technorati 1.01 -->

<p class='technorati-tags'>OSA Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Audience' rel='tag' target='_blank'>Audience</a>, <a class='technorati-link' href='http://technorati.com/tag/E+Mail' rel='tag' target='_blank'>E Mail</a>, <a class='technorati-link' href='http://technorati.com/tag/Event+Planning' rel='tag' target='_blank'>Event Planning</a>, <a class='technorati-link' href='http://technorati.com/tag/Event+Registration+Service' rel='tag' target='_blank'>Event Registration Service</a>, <a class='technorati-link' href='http://technorati.com/tag/Event+Security' rel='tag' target='_blank'>Event Security</a>, <a class='technorati-link' href='http://technorati.com/tag/Few+Minutes' rel='tag' target='_blank'>Few Minutes</a>, <a class='technorati-link' href='http://technorati.com/tag/Hosting' rel='tag' target='_blank'>Hosting</a>, <a class='technorati-link' href='http://technorati.com/tag/Hosts' rel='tag' target='_blank'>Hosts</a>, <a class='technorati-link' href='http://technorati.com/tag/Invitations' rel='tag' target='_blank'>Invitations</a>, <a class='technorati-link' href='http://technorati.com/tag/Invitees' rel='tag' target='_blank'>Invitees</a>, <a class='technorati-link' href='http://technorati.com/tag/Job' rel='tag' target='_blank'>Job</a>, <a class='technorati-link' href='http://technorati.com/tag/Limited' rel='tag' target='_blank'>Limited</a>, <a class='technorati-link' href='http://technorati.com/tag/Registrants' rel='tag' target='_blank'>Registrants</a>, <a class='technorati-link' href='http://technorati.com/tag/Registration+Interface' rel='tag' target='_blank'>Registration Interface</a>, <a class='technorati-link' href='http://technorati.com/tag/Scenarios' rel='tag' target='_blank'>Scenarios</a>, <a class='technorati-link' href='http://technorati.com/tag/Stress' rel='tag' target='_blank'>Stress</a>, <a class='technorati-link' href='http://technorati.com/tag/Vet' rel='tag' target='_blank'>Vet</a>, <a class='technorati-link' href='http://technorati.com/tag/Web+Page+Link' rel='tag' target='_blank'>Web Page Link</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://www.onlinesecurityauthority.com/website-security/an-event-registration-service-can-eliminate-much-event-planning-stress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 1.756 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-11 12:07:45 -->
