00001 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
#include "lpcp.h"
00035 
00036 
00037 
VOID
00038 LpcpMoveMessage (
00039     OUT PPORT_MESSAGE DstMsg,
00040     IN PPORT_MESSAGE SrcMsg,
00041     IN PUCHAR SrcMsgData,
00042     IN ULONG MsgType OPTIONAL,
00043     IN PCLIENT_ID ClientId OPTIONAL
00044     )
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 {
00075     ULONG NumberDwords;
00076     ULONGLONG Temp1, Temp2, Temp3;
00077 
00078     
00079     
00080     
00081 
00082     *((PULONG)DstMsg)++ = NumberDwords = *((PULONG)SrcMsg)++;
00083     NumberDwords = ((0x0000FFFF & NumberDwords) + 3) >> 2;
00084 
00085     
00086     
00087     
00088 
00089     *((PULONG)DstMsg)++ = MsgType == 0 ? *((PULONG)SrcMsg)++ :
00090                          *((PULONG)SrcMsg)++ & 0xFFFF0000 | MsgType & 0xFFFF;
00091 
00092     
00093     
00094     
00095 
00096     *((PULONG_PTR)DstMsg)++ = ClientId == 
NULL ? *((PULONG_PTR)SrcMsg) :
00097             *((PULONG_PTR)ClientId)++;
00098     ((PULONG_PTR)SrcMsg)++;
00099 
00100     *((PULONG_PTR)DstMsg)++ = ClientId == 
NULL ? *((PULONG_PTR)SrcMsg) :
00101             *((PULONG_PTR)ClientId);
00102     ((PULONG_PTR)SrcMsg)++;
00103 
00104     
00105     
00106     
00107 
00108     *((PULONG_PTR)DstMsg)++ = *((PULONG_PTR)SrcMsg)++;
00109     *((PULONG_PTR)DstMsg)++ = *((PULONG_PTR)SrcMsg)++;
00110 
00111     
00112     
00113     
00114 
00115     
if (NumberDwords > 0) {
00116 
00117         
if ((ULONG_PTR) SrcMsgData & (
sizeof(ULONGLONG)-1)) {
00118 
00119             
00120             
00121             
00122 
00123             Temp1 = *((PULONG) SrcMsgData)++;
00124 
00125             
while (NumberDwords >= 3) {
00126 
00127                 Temp2 = *((PULONGLONG)SrcMsgData)++;
00128                 *((PULONGLONG)DstMsg)++ = (Temp2 << 32) | Temp1;
00129                 Temp1 = Temp2 & 0x0000FFFF;
00130                 NumberDwords -= 
sizeof(ULONGLONG) / 
sizeof(ULONG);
00131             }
00132 
00133             *(PULONG)DstMsg = (ULONG)Temp1;
00134             NumberDwords--;
00135 
00136         } 
else {
00137 
00138             
00139             
00140             
00141             
00142 
00143             
while (NumberDwords >= 
sizeof(ULONGLONG) / 
sizeof(ULONG)) {
00144 
00145                 *((PULONGLONG)DstMsg)++ = *((PULONGLONG)SrcMsgData)++;
00146                 NumberDwords -= 
sizeof(ULONGLONG) / 
sizeof(ULONG);
00147             }
00148         }
00149 
00150         
00151         
00152         
00153     
00154         
while (NumberDwords--) {
00155             *((PULONG)DstMsg)++ = *((PULONG)SrcMsgData)++;
00156         }
00157     }
00158 }
00159 
00160